我想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结果) !
想法?
这可能不是很有用,但我发现在Carrierwave
本身可疑convert
方法:convert(some_format)
调用manipulate!(:format => some_format)
,进而调用(some_image_object).write("#{some_format}:#{current_path}")
。现在如果传入的原始图像是bla.format(format = jpg,png等),current_path
具有.format的扩展名(通过在manipulate!
上的猴子补丁测试)。在RMagick
中,图像格式转换的工作方式是使用具有所需扩展名的参数调用write
。那么,为什么上面的jpeg转换实际发生?如果是这样,为什么PNG转换失败?
而且,如果它是有用的,我on Rails的3.0.9和Carrierwave 0.5.6
谢谢!
谢谢,你救了我的夜 –
任何人在看这个答案可以阅读此:http://stackoverflow.com/questions/19625066/carrierwave-rmagick-not-removing-transparency-in-convert-to-jpg – JakeTheSnake