Dragonfly转换不使用ImageMagick的配置文件选项

时间:2017-07-19 12:36:39

标签: ruby-on-rails imagemagick rgb cmyk dragonfly-gem

我正在尝试使用Dragonfly gem为CMYK pdf文件生成RGB缩略图。这段代码工作正常:

file.image.convert("-flatten -density 300 -quality 100", 'format' => 'jpg', 'frame' => 0).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命令":

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内的问题?

2 个答案:

答案 0 :(得分:0)

我不知道蜻蜓。但是你不应该同时使用-colorspace和profile来从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作为默认值。

答案 1 :(得分:0)

我设法让它使用自定义处理器和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