我有一张图片,我想用空白和中心“填充”。
在大多数情况下,我需要将图像的大小从 16 或 32 像素调整到 32 像素。 如果图像是 16 像素,我想在每边添加 8px 的空白,使其成为 32 像素的图像(原始 float 在中间)。
如果是 32 像素的图像,则没有任何变化。
我正在使用 RMagick 进行转换:
image.change_geometry!("#{size}x#{size}") { |cols, rows, img|
newimg = img.extent(cols, rows)
newimg.write("#{RAILS_ROOT}#{path}/#{name}.png")
}
工作正常,但较小的图像位于新图像的左上角,而不是居中。 我在看重力设置,它似乎是我需要的,但我不知道如何在调用中指定它?
提前致谢。
最佳答案
检查以下载波函数的实现 http://rubydoc.info/gems/carrierwave/0.5.1/CarrierWave/RMagick#resize_and_pad-instance_method
这是上述方法的一个版本,仅使用 RMagick 依赖
require 'RMagick'
include Magick
module Converter
def self.resize_and_pad(img, new_img_path, width, height, background=:transparent, gravity=::Magick::CenterGravity)
img.resize_to_fit!(width, height)
new_img = ::Magick::Image.new(width, height)
if background == :transparent
filled = new_img.matte_floodfill(1, 1)
else
filled = new_img.color_floodfill(1, 1, ::Magick::Pixel.from_color(background))
end
# destroy_image(new_img)
filled.composite!(img, gravity, ::Magick::OverCompositeOp)
# destroy_image(img)
# filled = yield(filled) if block_given?
# filled
filled.write new_img_path
end
end
关于ruby-on-rails - RMagick 随重力改变图像范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5831546/