Я бы хотел, чтобы Carrierwave
создавал несколько версий изображения, одну в формате png и одну в формате jpeg, но я могу Кажется, это не работает. Я понимаю, что здесь и в других местах задавалось несколько похожих вопросов, но мне не удалось найти решения. В общих чертах, вот что у меня есть:
class MyUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
version :jpeg do
process :convert => 'jpg'
# more procesors
process :processed => :jpg
end
version :png do
process :convert => 'png'
# more processors
process :processed => :png
end
def store_path(for_file = filename)
if version_name != :png
return "#{version_name}.jpg"
else
return "#{version_name}.png"
end
end
def filename
filename = if version_name != :png
super != nil ? super.split('.').first + '.jpg' : super
else
super != nil ? super.split('.').first + '.png' : super
end
end
end
Итак, независимо от типа формата изображения, который я передаю, это создает два файла: один с именем jpg.jpg
, а другой - с именем png.png
. jpg.jpg
действительно всегда является файлом JPEG (что подтверждается командой Unix file
), НО png.png
является истинным файлом в формате PNG, если и только если я изначально передаю файл в формате PNG (передача в формате jpeg приводит к файлу в формате jpeg)!
Идеи?
Это может быть бесполезно, но я считаю метод convert
в Carrierwave
сам по себе подозрительным: convert (some_format)
вызывает ] манипулировать! (: format => some_format)
, который, в свою очередь, вызывает (some_image_object) .write ("# {some_format}: # {current_path}")
. Теперь, если исходное изображение передано в формате bla.format (format = jpg, png и т. Д.), current_path
with имеют расширение .format (проверено с помощью патча обезьяны на манипулировать!
]).А преобразование формата изображения работает в RMagick
путем вызова write
с аргументом, имеющим желаемое расширение. Так почему же на самом деле произошло преобразование jpeg, описанное выше? И если да, то почему конвертация png не удалась?
Кроме того, если это полезно, я использую Rails 3.0.9 и Carrierwave 0.5.6
Спасибо!