我正在尝试用Minimagick自动转换SVG图像为PNG。我有一个Rails应用程序,我需要在那里自动转换上传的SVG文件。这个应用程序运行在Heroku上。这些SVG通常有一个透明的背景。
这是我正在使用的代码:
class MyUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
version :email do
process :convert_to_png
def full_filename (for_file = model.logo.file)
"#{model.friendly_id}-#{model.id}-logo-email.png"
end
end
def convert_to_png
manipulate! do |img|
img = img.format 'png'
img = img.density 300
img = img.resize '800x400'
img = img.background 'none'
end
end
end
这将创建一个宽度为800的png图像。但是,不应用属性background 'none'
。原始图像具有透明背景,生成的转换图像具有白色背景。
我看到Minimagick调用Imagemagick的mogrify命令,我也找到了创建所需图像所需的命令,但我在将其转换为上传程序的函数时遇到了麻烦。在上传程序中以相同的顺序使用相同的参数是行不通的,因为如果没有首先调用img = img.format 'png'
行,它会抛出错误。
mogrify -density 300 -background none -resize 400x200 -format png myfile.svg
1条答案
按热度按时间ccrfmcuu1#
**注:**我不使用这个库,所以所有这些都是从文档和源代码中收集的。如果这些对你不起作用,我会删除这篇文章,因为它太长了,无法发表评论。
以下是一些建议:
也许可以尝试
combine_options
?”MiniMagick::Image#combine_options
接受多个选项,并从中构建一个命令。" 这更符合您所需的CLI调用另一种选择是触摸 Metal 并生成该命令。