我正在使用RMagick的resample
方法来更改我拥有的图片的DPI分辨率(从300x300
到72x72
。
我使用它的代码:
original_image = Magick::Image.read("my300x300file.jpg") { self.density = "72.0x72.0" }
original_image.each do |image|
image = image.resample(72.0, 72.0)
image.density = "72x72"
image.write("my72x72file.jpg") { self.quality = 50 }
end
执行代码后,my72x72file.jpg
尺寸已减少,但其 DPI分辨率仍为300
(表示文件)大小并没有减少太多;实际上,即使我将self.quality
设置为0
,文件大小也会不会发生变化。
答案 0 :(得分:1)
尝试image = image.resize_to_fit!(72.0, 72.0)
而不是image = image.resample(72.0, 72.0)
resize_to_fit
更改图像的尺寸,而resample
更改图像的分辨率(dpi)。通常分辨率为96 dpi或72 dpi。我没有看到300 dpi的图像。请试一试。
答案 1 :(得分:1)
更改文件的分辨率不会(也不应该)更改文件大小。分辨率是每英寸的点数,而文件大小是根据实际像素的数量确定(在控制其他所有内容,如文件大小,压缩等)后,无论它们消耗多少英寸。
如果你想改变你的图像的分辨率(即Photoshop,GIMP等说它是什么),我发现唯一有效的方法是创建一个具有适当分辨率的新图像,然后合成你的原始图像在它上面。这似乎适得其反,但这是我能让它完全发挥作用的唯一方式。
示例代码:
image = Magick::Image.read("my300x300file.jpg").first
dpi_image = Magick::Image.new(image.columns, image.rows) {
self.density = "72x72"
self.background_color = "none"
}
image = dpi_image.composite(image, Magick::CenterGravity, Magick::OverCompositeOp)
答案 2 :(得分:0)
老问题,但我遇到了类似的问题,显然,这仍然是一个问题。更改图像上的密度并不能解决问题,除非还指定了单位(默认为UndefinedResolution
,与文档here中所述的不同)。在为我设置密度之前设置单位(反过来没有)。在上面的例子中,它应该是这样的:
original_image = Magick::Image.read("my300x300file.jpg") { self.density = "72.0x72.0" }
original_image.each do |image|
image = image.resample(72.0, 72.0)
image.units = Magick::PixelsPerInchResolution
image.density = "72x72"
image.write("my72x72file.jpg") { self.quality = 50 }
end