蜻蜓转换不适用于 ImageMagick 的配置文件选项
Dragonfly convert not working with ImageMagick's profile option
我正在尝试使用 Dragonfly gem 为 CMYK pdf 文件生成 RGB 缩略图。使用此代码可以正常工作:
file.image.convert("-flatten -density 300 -quality 100", 'format' => 'jpg', 'frame' => 0).url
结果是缩略图的正确url。
由于一些用户上传了 CMYK 文档,我想使用颜色配置文件和 colorspace
选项转换它们:
file.image.convert("-flatten -profile /path_to/USWebCoatedSWOP.icc -profile /path_to/AppleRGB.icc -colorspace rgb -density 300 -quality 100", 'format' => 'jpg', 'frame' => 0).url
结果总是"nil"。没有显示错误。
当我在终端中手动执行代码(显示在控制台中)时,文件已正确转换。 "DRAGONFLY: shell command":
convert /path_to/my_cmyk_file.pdf[0] -flatten -profile /path_to/USWebCoatedSWOP.icc -profile /path_to/AppleRGB.icc -colorspace RGB -density 300 -quality 100 /path_to/my_rgb_thumbnail.jpg
结果是这样的:
/path_to/USWebCoatedSWOP.icc ICC 1x1 1x1+0+0 16-bit sRGB 557168B 0.010u 0:00.000
/path_to/AppleRGB.icc ICC 1x1 1x1+0+0 16-bit sRGB 552B 0.000u 0:00.000
/path_to/my_cmyk_file.pdf[0]=>/path_to/my_rgb_thumbnail.jpg PDF 420x595 420x595+0+0 16-bit sRGB 56625B 0.180u 0:00.190
什么可能导致 Dragonfly 中的问题?
我不知道蜻蜓。但是您不应同时使用 -colorspace 和配置文件将 CMYK 转换为 RGB。使用一个或另一个。更好的选择是使用配置文件。您还应该在阅读 PDF 文件之前设置密度以获得更好的质量,除非您尝试设置 jpg 的密度。如果是这样,您应该包括 -units pixelsperinch。你的 ImageMagick 命令应该是
convert -density 300 /path_to/my_cmyk_file.pdf[0] -flatten -profile /path_to/USWebCoatedSWOP.icc -profile /path_to/AppleRGB.icc -quality 100 /path_to/my_rgb_thumbnail.jpg
或
convert /path_to/my_cmyk_file.pdf[0] -flatten -profile /path_to/USWebCoatedSWOP.icc -profile /path_to/AppleRGB.icc -density 300 -units pixelperinch -quality 100 /path_to/my_rgb_thumbnail.jpg
如果 CMYK pdf 已有配置文件,则不需要第一个配置文件,也不应包括在内。您可能也不想要 -quality 100,因为这会生成更大的文件。 ImageMagick 默认使用 -quality 92。
我设法让它与自定义处理器和 shell_update
功能一起工作:
processor :cmyk_pdf_thumb do |content|
content.shell_update ext: 'jpg' do |old_path, new_path|
"convert -density 300 #{old_path}[0] -flatten -profile USWebCoatedSWOP.icc -profile AppleRGB.icc #{new_path}"
end
end
现在我可以通过file.image.cmyk_pdf_thumb
转换CMYK文档了。即使我将 ext
选项设置为 "jpg",我也必须 encode
结果才能获得 JPEG 文件:
file.image.cmyk_pdf_thumb.encode('jpg').url
我正在尝试使用 Dragonfly gem 为 CMYK pdf 文件生成 RGB 缩略图。使用此代码可以正常工作:
file.image.convert("-flatten -density 300 -quality 100", 'format' => 'jpg', 'frame' => 0).url
结果是缩略图的正确url。
由于一些用户上传了 CMYK 文档,我想使用颜色配置文件和 colorspace
选项转换它们:
file.image.convert("-flatten -profile /path_to/USWebCoatedSWOP.icc -profile /path_to/AppleRGB.icc -colorspace rgb -density 300 -quality 100", 'format' => 'jpg', 'frame' => 0).url
结果总是"nil"。没有显示错误。
当我在终端中手动执行代码(显示在控制台中)时,文件已正确转换。 "DRAGONFLY: shell command":
convert /path_to/my_cmyk_file.pdf[0] -flatten -profile /path_to/USWebCoatedSWOP.icc -profile /path_to/AppleRGB.icc -colorspace RGB -density 300 -quality 100 /path_to/my_rgb_thumbnail.jpg
结果是这样的:
/path_to/USWebCoatedSWOP.icc ICC 1x1 1x1+0+0 16-bit sRGB 557168B 0.010u 0:00.000
/path_to/AppleRGB.icc ICC 1x1 1x1+0+0 16-bit sRGB 552B 0.000u 0:00.000
/path_to/my_cmyk_file.pdf[0]=>/path_to/my_rgb_thumbnail.jpg PDF 420x595 420x595+0+0 16-bit sRGB 56625B 0.180u 0:00.190
什么可能导致 Dragonfly 中的问题?
我不知道蜻蜓。但是您不应同时使用 -colorspace 和配置文件将 CMYK 转换为 RGB。使用一个或另一个。更好的选择是使用配置文件。您还应该在阅读 PDF 文件之前设置密度以获得更好的质量,除非您尝试设置 jpg 的密度。如果是这样,您应该包括 -units pixelsperinch。你的 ImageMagick 命令应该是
convert -density 300 /path_to/my_cmyk_file.pdf[0] -flatten -profile /path_to/USWebCoatedSWOP.icc -profile /path_to/AppleRGB.icc -quality 100 /path_to/my_rgb_thumbnail.jpg
或
convert /path_to/my_cmyk_file.pdf[0] -flatten -profile /path_to/USWebCoatedSWOP.icc -profile /path_to/AppleRGB.icc -density 300 -units pixelperinch -quality 100 /path_to/my_rgb_thumbnail.jpg
如果 CMYK pdf 已有配置文件,则不需要第一个配置文件,也不应包括在内。您可能也不想要 -quality 100,因为这会生成更大的文件。 ImageMagick 默认使用 -quality 92。
我设法让它与自定义处理器和 shell_update
功能一起工作:
processor :cmyk_pdf_thumb do |content|
content.shell_update ext: 'jpg' do |old_path, new_path|
"convert -density 300 #{old_path}[0] -flatten -profile USWebCoatedSWOP.icc -profile AppleRGB.icc #{new_path}"
end
end
现在我可以通过file.image.cmyk_pdf_thumb
转换CMYK文档了。即使我将 ext
选项设置为 "jpg",我也必须 encode
结果才能获得 JPEG 文件:
file.image.cmyk_pdf_thumb.encode('jpg').url