2011-08-02 90 views
1

我使用RMagick的resample方法來改變圖像我有(從300x30072x72的DPI分辨率(DPI的分辨率不變化)。RMagick的重採樣方法調整圖像大小,而不是重新取樣,

代碼我用它這樣:

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(這意味着第e文件大小並沒有減少太多;實際上,即使我將self.quality設置爲0,文件大小實際上也不會改變)。

+0

由於RMagick建立在ImageMagick上,所以這可能不是RMagick本身的問題。 – tadman

回答

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

更改文件的分辨率不會(也不應該)更改文件大小。分辨率是每英寸的點數,而文件大小是根據實際像素的數量確定的(對文件大小,壓縮等其他所有內容進行控制之後),無論它們消耗了多少英寸。

如果你想改變你的圖像的分辨率(即什麼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) 
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 
相關問題