Rails rmagick - 应用 'resize_to_fit' 后转换后的图像变为纯黑色

Rails rmagick - Converted Image Turns Solid Black When 'resize_to_fit' applied

我有一张图片,正在从 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)

替换:

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

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

因为我有一张全尺寸的好图像(大部分是白色图像),我不明白为什么 "resize" 或 "change_geometry" 会输出纯黑色。

想法?


经过几十次随机实验,我发现唯一不输出黑色矩形的大小转换是:

pdf.first.sample!(0.25)

当然,限制是我必须有一个一致的输入大小才能工作,因为另一个参数集(x 和 y)会改变纵横比。

此外,'sample' 生成的质量非常糟糕,无论在输入端或输出端应用的设置如何。

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


@bumpy 的回答是解决方案。我现在使用 Carrierwave 以不同的方式进行操作,但我倒转了代码并进行了 A:B 测试;该行

pdf.first.alpha(Magick::DeactivateAlphaChannel)

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

可能是您的 PDF 文件有透明背景,这是导致问题的原因。尝试使用

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