Rails rails 有没有类似 ImageResizer 这样根据图片请求地址的参数动态生成不同尺寸图片的类库?

zicjin · 2014年08月28日 · 最后由 zj0713001 回复于 2014年08月29日 · 1948 次阅读

http://www.nuget.org/packages/ImageResizer

比如一个图片请求:http://domain.com/aaa.jpg 如果替换为 http://domain.com/aaa.jpg?100x100 就会第得到 100x100 尺寸的新图片,并缓存在服务器。

minimagick/rmagick

require 'RMagick'
def resize_img
    uploaded_io = params[:avatar]
    if uploaded_io.nil?
      redirect_to "/", status: :found, notice: "请选择头像"
      return
    end
    name = uploaded_io.original_filename
    File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'wb') do |file|
      file.write(uploaded_io.read)
    end
    name_path = Rails.root.join('public', 'uploads', name)
    img = Magick::Image.read(name_path).first
    resize_width = params[:width] ? params[:width] : 200
    resize_height = params[:height] ? params[:height] : 200
    thumb = img.resize(resize_width , resize_height )
    thumb.write(name_path)

#1 楼 @flowerwrong 这个只是手动生成,跟需求有区别吧?

#2 楼 @zicjin 还是推荐上传的时候就裁剪好 裁剪一次要很久的 动态裁剪的话 第一次访问的用户就尴尬了

#3 楼 @zj0713001 之前在.NET 平台一直是这样的方案,真没觉得有尴尬。缩图的资源消耗是很少的吧,而且第一次请求肯定是完全在内存里走,不会等磁盘缓存好了之后才返回图片。

#1 楼 @flowerwrong image.resize "100x100" 这部分我可以只设置 width 不限制 height 吗?保证长宽比例不变。

#5 楼 @zicjin 啥意思?image.resize "100x100"是 minimagick 的写法吧。这不都是 post 或者 get 传递的参数决定吗?想传多少都行啊。 你意思是

width = 100
hieght = 1 * width

没搞懂!!!

#4 楼 @zicjin 其实还是很慢的 ruby 的图片都是调用 imagemagick imagemagick 的处理是你先从 tmp 请求一个空间 然后他生成临时文件 这时候你读临时文件返回给用户 然后临时文件你再处理存缓存 这里没办法全放在内存里 resize 只设置 width 不限制 height 的参数是 '100x'

#6 楼 @flowerwrong 我本意是 height 不设限制,任意多少,保持原图高宽比例。后来发现 minimagick 默认就是这样处理,所以这个问题就作罢。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册