我想调整图像大小/缩放图像。原件尺寸与300x200或512x600不同。我想将图像调整为100x100,但不要从图像或变化率中裁剪任何东西。理想情况下,图像首先将长边缩放到100(纵横比),然后用白色填充较小的边缘。
.---------.
|- - - - -|
| IMAGE |
|- - - - -|
'---------'
我不使用Paperclip或Rails,只使用RMagick。
答案 0 :(得分:6)
我已经完成了将已调整大小的图像与新的100x100图像合并。这肯定不是最好的方式,但它的工作原理:
img = Magick::Image.read("file.png").first
target = Magick::Image.new(100, 100) do
self.background_color = 'white'
end
img.resize_to_fit!(100, 100)
target.composite(img, Magick::CenterGravity, Magick::CopyCompositeOp).write("file-small.png)
答案 1 :(得分:1)
玩了一段时间后,我得到了Fu86的复合技巧:
img = Image.read("some_file").first().resize_to_fit!(width, height)
target = Image.new(width, height) do
self.background_color = 'white'
end
target.composite(img, CenterGravity, AtopCompositeOp).write("some_new_file")
AtopCompositeOp
似乎比CopyCompositeOp
工作得更好,{{1}}由于某种原因使我的背景部分变黑。
答案 2 :(得分:1)
image = Magick::Image.read("filename").first
resized = image.resize_to_fit(width, height) # will maintain aspect ratio, so one of the resized dimensions may be less than the specified dimensions
resized.background_color = "#FFFFFF" # without a default, background color will vary based on the border of your original image
x = (resized.columns - width) / 2 # calculate necessary translation to center image on background
y = (resized.rows - height) / 2
resized = resized.extent(width, height, x, y) # 'extent' fills out the resized image if necessary, with the background color, to match the full requested dimensions. the x and y parameters calculated in the previous step center the image on the background.
resized.write("new_filename")
注意:在heroku上,截至本帖子使用imagemagick 6.5.7-8,我需要将x和y的翻译乘以-1(并发送正数)。版本6.8.0-10预计为负数。
答案 3 :(得分:0)
您似乎想要使用change_geometry ...