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