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