使用RMagick上传并调整大小
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用RMagick上传并调整大小相关的知识,希望对你有一定的参考价值。
Use this to upload and resize your images using RMagick. Code by nixnewbie.
require 'RMagick' class Profile < ActiveRecord::Base belongs_to :user #image = the image passed from params[:image] #file_type = the confirmed filetype from the controller #current_user = various information about the current user def self.upload(image, file_type, current_user) #set default cols and rows for our two images that will be created from the uploaded user image img_size = {:main =>{:cols => 250,:rows => 375}, :thumb =>{:cols =>80, :rows =>120} } #set base directory for the users image imgDir = "#{RAILS_ROOT}/public/images/user_images" #set the base name for our userimage userImg = " #{current_user.login}-#{current_user.id}" #loop through the image dir and delete any old user images Dir.foreach(imgDir){|file| if file.to_s.include?(userImg) File.unlink("#{imgDir}/#{file}") end } #read the image from the string imgs = Magick::Image.from_blob(image.read) #change the geometry of the image to suit our predefined size main_image = imgs.first.change_geometry!("#{img_size[:main][:cols]}x#{img_size[:main][:rows]}") { |cols, rows, img| #if the cols or rows are smaller then our predefined sizes we build a white background and center the image in it if cols < img_size[:main][:cols] || rows < img_size[:main][:rows] #resize our image img.resize!(cols, rows) #build the white background bg = Magick::Image.new(img_size[:main][:cols],img_size[:main][:rows]){self.background_color = "white"} #center the image on our new white background bg.composite(img, Magick::CenterGravity, Magick::OverCompositeOp) else #in the unlikely event that the new geometry cols and rows match our predefined size we will not set a white bg img.resize!(cols, rows) end } main_image.write "#{imgDir}/#{userImg}.#{file_type}" thumb = imgs.first.change_geometry!("#{img_size[:thumb][:cols]}x#{img_size[:thumb][:rows]}") { |cols, rows, img| if cols < img_size[:thumb][:cols] || rows < img_size[:thumb][:rows] img.resize!(cols, rows) bg = Magick::Image.new(img_size[:thumb][:cols],img_size[:thumb][:rows]){self.background_color = "white"} bg.composite(img, Magick::CenterGravity, Magick::OverCompositeOp) else img.resize!(cols, rows) end } thumb.write "#{imgDir}/#{userImg}-thumb.#{file_type}" if FileTest.exist?("#{imgDir}/#{userImg}.#{file_type}") return "The file was written and its name is #{userImg}.#{file_type}" else return false end end end
以上是关于使用RMagick上传并调整大小的主要内容,如果未能解决你的问题,请参考以下文章
在上传之前调整图像文件的大小;我们可以覆盖临时文件并上传吗?
使用 node sharp 包调整图像大小并上传到 s3 时,它会旋转
如何在nodejs中使用sharp调整图像大小然后使用multer上传