Ruby 图片上传时的裁剪和缩放

常见的网站,都涉及到用户的头像上传这方面,这里就需要将上传的图片经过处理后生成规定大小的头像。在ROR项目中,要对图片进行处理,首先得安装ImageMagick?-6.3.0-7-Q8-windows-dll.exe,然后安装Mini_Magick,gem install mini_magick,(RMagick也能对图片进行处理,但我没有找到裁剪函数,所以我选择使用MiniMagick?.)安装完成后在工程envirmoment.rb中添加代码require 'mini_magick'.
由于用户上传的图片并不一定是头像所要求的尺寸,所以需要对上传的图片进行缩放,而如果图片是矩形而头像要求方形的话,缩放后图像会变形。而对图片的处理应该首先裁剪成方形,然后进行缩放,这样效果才是最好的。
具体的步骤是:

# 根据图片的宽高确定裁剪图片成正方形,并进行缩放
#【引数】图片名
#【返値】
#【注意】
#【著作】
def save_photo(photo)
    img = MiniMagick::Image.open(photo)     # 通过路径打开图片
    w,h = img[:width], img[:height]         # 获得图片的宽和高
    shaved_off = w >= h ? [((w-h)/2).round, 0] : [0, ((h-w)/2).round]  # 判断宽高,将长的一部分左右各裁一半
    img.shave "#{shaved_off[0]}x#{shaved_off[1]}"                      # shave 裁剪函数
    img.resize 150                                                     # 图片按150的尺寸缩放
    img.write(photo)                                                  # 按原路径保存
end

 

posted @ 2012-11-30 17:48  残星  阅读(874)  评论(0编辑  收藏  举报