Rails rmagick - 当'resize_to_fit'应用

时间:2015-08-20 15:45:55

标签: ruby-on-rails rmagick

我有一张图片,我正在从pdf文件中读取并转换为jpg。它工作正常,直到我应用“resize_to_fit” - 这会产生一个黑色矩形(指定大小)。

file = file + "[0]"
jpg_file = file + ".jpg"
pdf = Magick::Image.read(file) do
  self.quality = 80
  self.density = '300'
  self.colorspace = Magick::RGBColorspace
  self.interlace = Magick::NoInterlace
end
pdf.first.resize_to_fit!("600")
}
pdf.first.write(jpg_file)

Subsituting:

pdf.first.change_geometry!('600x600') { |cols, rows, img|
  img.resize!(cols, rows)
}

...调整大小没有任何区别,也没有改变质量或密度,也没有省略色彩空间和交错设置。

由于我的全尺寸图像(主要是白色图像),我不明白为什么“调整大小”或“change_geometry”会输出纯黑色。

想法?

之后的几十个随机实验,我发现唯一不输出黑色矩形的尺寸转换是:

pdf.first.sample!(0.25)

当然,限制是我必须有一致的输入大小才能使用,因为另一个参数集(x和y)将改变宽高比。

此外,无论输入或输出端的设置如何,“样本”产生的质量都很糟糕。

我需要一种让resize_to_fit正常工作的方法。我正在关注文档和示例,因此结果毫无意义。我真的希望有人经常使用rmagick,并且熟悉它的哪些部分没有被破坏,或者我做错了什么,可以回应帮助。感谢

来自@bumpy的回答是解决方案。我现在使用Carrierwave以不同的方式进行,但我重新编写代码并进行A:B测试;这条线

pdf.first.alpha(Magick::DeactivateAlphaChannel)

......有效。请注意,Carrierwave可以正确地进行转换,并且具有良好的质量结果(与此解决方案相同),无需任何特殊设置。我猜这是内置到jpg转换的默认值。

1 个答案:

答案 0 :(得分:3)

您的PDF文件可能具有透明背景,这会导致问题。尝试在使用

调整大小之前删除Alpha通道
pdf.first.alpha(Magick::DeactivateAlphaChannel)
pdf.first.resize_to_fit!("600")