Posted at

RMagickでresize_and_pad(個人的メモ)

More than 3 years have passed since last update.

CarrierWaveが入らないほど古いバージョンのrubyを使っているプロジェクトでRMagickを使ってresize_and_padするときに少しハマったのでメモ。

  def resize_image(local_file_path, image_size)

dir_name = File.dirname(local_file_path)
base_name = File.basename(local_file_path)
original = Magick::Image.read(local_file_path).first
# 画像を215×215にリサイズ
original = resize_and_pad(original, 215, 215)
original.write('test.jpg')
end

def resize_and_pad(image, width, height)
# change_geometryを通さないとpaddingが効いてくれない
image.change_geometry("#{width}x#{height}") do |cols,rows,img|
# !を付けると破壊的にimgを上書きする
img.resize_to_fit!(cols,rows)
# 背景色を白にする
img.background_color = 'white'
# ImageMagickの仕様で位置合わせの座標にマイナスが付与される
# そのため第3, 第4引数にはマイナスを付ける必要がある
img.extent( width, height, -(width-cols)/2, -(height-rows)/2)
end
end