当前位置:  开发笔记 > 编程语言 > 正文

Rails:使用Paperclip,S3和RMagick进行图像裁剪

如何解决《Rails:使用Paperclip,S3和RMagick进行图像裁剪》经验,为你挑选了1个好方法。

我目前正在尝试编写类似于互联网上其他类似的自定义图像裁剪系统,用户可以选择裁剪区域,然后相应地裁剪图像.该应用程序位于Rails中,我们将Paperclip与Amazon S3一起使用来存储文件.虽然让RMagick从S3适当裁剪文件,但我遇到了很多麻烦.这是当前代码(不起作用):

   if params[:width].to_i > 0 and params[:height].to_i > 0 then
      photo = Photo.find(params[:id])
      image_data = Net::HTTP.get_response(URI.parse(photo.photo.url(:big))).body
      orig_img = Magick::ImageList.new
      orig_img.from_blob(image_data)

      args = [params[:x1].to_i, params[:y1].to_i, params[:width].to_i, params[:height].to_i]
      orig_img.crop!(*args)
      photo.update_attributes({:photo => orig_img.to_blob})

      photo.photo.reprocess!
      photo.save
    end

主要问题是裁剪后的图像没有通过回形针上传回S3,因此没有正确裁剪.之前有没有人用回形针尝试这样的东西?这可能是不可能的,但任何帮助将不胜感激.



1> Eric Scrivne..:

我已经能够暂时解决这个问题如下:

  photo = Photo.find(params[:id])
  image_data = Net::HTTP.get_response(URI.parse(photo.photo.url(:big))).body
  orig_img = Magick::ImageList.new
  orig_img.from_blob(image_data)

  args = [params[:x1].to_i, params[:y1].to_i, params[:width].to_i, params[:height].to_i]
  orig_img.crop!(*args)

  tmp_img = Tempfile.new("image_data")
  orig_img.format = "png"
  tmp_img.write(orig_img.to_blob)
  photo.photo = tmp_img
  tmp_img.close

  photo.photo.reprocess!
  photo.save

这里主要关注的是创建新临时文件的速度,所以我们可能需要创建自己的自定义界面.希望这可以成为人们解决类似问题的良好起点.

编辑:简单来说,Tempfile是回形针库的一部分.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有