我有一张图片,我正在从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转换的默认值。
答案 0 :(得分:3)
您的PDF文件可能具有透明背景,这会导致问题。尝试在使用
调整大小之前删除Alpha通道pdf.first.alpha(Magick::DeactivateAlphaChannel)
pdf.first.resize_to_fit!("600")