Carrierwave RMagick entfernt beim Konvertieren in JPG keine Transparenz

Ich versuche eine PNG hochzuladen und ein paar Thumbnails zu speichern. Die Thumbnails sollten alle JPG sein und keine Transparenz haben. Irgendwie wird die Datei als JPG gespeichert, hat aber Transparenz ...

Hier ist mein Uploader:

# encoding: utf-8

class WinePhotoUploader < CarrierWave::Uploader::Base

    # Include RMagick or MiniMagick support:
    include CarrierWave::RMagick
    # include CarrierWave::MiniMagick

    # Choose what kind of storage to use for this uploader:
    storage :file
    # storage :fog

    # Override the directory where uploaded files will be stored.
    # This is a sensible default for uploaders that are meant to be mounted:
    def store_dir
    "assets/wines/#{version_name}"
    end

    CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/

    # Provide a default URL as a default if there hasn't been a file uploaded:
    def default_url
    # For Rails 3.1+ asset pipeline compatibility:
    ActionController::Base.helpers.asset_path("pages/wines/#{version_name}/default.png")
    end

    process :for_all
    process :convert => 'jpg'

    version :croppable, :if => :new_upload? do
    process :resize_and_pad => [1200, 1200, 'white']
    end

    version :show, :if => :new_upload? do
    process :resize_to_fit => [nil, '425']
    end

    version :general, :from_version => :show, :if => :new_upload? do
    process :resize_and_pad => [150, 375, 'white']
    end

    version :thumb, :from_version => :croppable, :if => :cropping? do
    process :rotate_to => [-30]
    process :crop_via_model
    process :resize_to_fit => [150, 150]
    end

    def for_all
    manipulate! do |img|
        img.trim
        img.gravity = Magick::CenterGravity

        # I only use these two because this shit isn't working...these don't seem to help!
        # Neither does the flatten method...even though other posts on stackoverflow.com say
        # that it works.
        img.background_color = 'white'
        img.alpha Magick::OpaqueAlphaChannel

        img.unsharp_mask 0.3, 0.3, 5, 0
        img
    end
    end

    def extend_to(w, h)
    manipulate! do |img|
        img.gravity = Magick::CenterGravity
        img.extent w, h
        img
    end
    end

    def rotate_to(deg)
    manipulate! do |img|
        img.gravity = Magick::CenterGravity
        img.distort Magick::ScaleRotateTranslateDistortion, deg
        #img.repage # WTF?!?!?!? No repage method?!
        img
    end
    end

    def crop_via_model
    manipulate! do |img|
        img.gravity = Magick::CenterGravity
        img.crop model.crop_x.to_i, model.crop_y.to_i, model.crop_w.to_i, model.crop_h.to_i
        img
    end
    end

    def flatten
    manipulate! do |img|
        img_list = Magick::ImageList.new
        img_list.from_blob img.to_blob
        img_list.new_image(img_list.first.columns, img_list.first.rows) { self.background_color = "white" } # Create new "layer" with white background and size of original image
        img = img_list.reverse.flatten_images
        img
    end
    end

    def new_upload? picture
    !model.cropping?
    end
    def cropping? picture
    model.cropping?
    end

    # Add a white list of extensions which are allowed to be uploaded.
    # For images you might use something like this:
    def extension_white_list
    %w(jpg jpeg gif png tif)
    end

    # Override the filename of the uploaded files:
    # Avoid using model.id or version_name here, see uploader/store.rb for details.
    def filename
    "#{ model.get_permalink(:normalized => true) }.jpg"
    end

    # Remove this when https://github.com/carrierwaveuploader/carrierwave/issues/1164 is solved.
    def recreate_versions!(*versions)
    if versions.any?
        from_versions = versions.group_by { |v| self.class.versions[v][:options][:from_version] }
        from_versions.each do |from, versions|
        next if from.nil?
        file = CarrierWave::SanitizedFile.new(self.versions[from.to_sym].file)
        store_versions!(file, versions)
        end
    else
        super(*versions)
    end
    end

end

Oh ... und anscheinend will carrierwave nichts aufzeichnen, also kann ich nicht sagen, was es tut.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage