在 Paperclip 和 Rails 4 中将 Jcrop 坐标转换为 convert_options

Posted

技术标签:

【中文标题】在 Paperclip 和 Rails 4 中将 Jcrop 坐标转换为 convert_options【英文标题】:get Jcrop coordinates to convert_options in Paperclip and Rails 4 【发布时间】:2016-02-03 03:32:15 【问题描述】:

我正在尝试从 Jcrop 获取用户隐藏字段参数并在将图像放入数据库之前对其进行裁剪。我找到了一些教程和问题,但没有一个能解决我的确切问题。

这是最接近的。看起来海报试图使用选择中的单个参数。我有 4 个整数。我认为这无关紧要,所以我认为这是“has_attached_file”部分:

Supplying a variable string to model for Paperclip Imagemagik resizing

结合这个:

https://github.com/thoughtbot/paperclip#dynamic-configuration

这就是我所拥有的,

型号:

class Muse < ActiveRecord::Base
attr_accessor :w, :h, :x, :y

def get_coor 

 #turn parameters into class variables
  @w = self.w
  @h = self.h
  @x = self.x
  @y = self.y

  #build string for options
  cropper = "-crop #@w.to_ix#@h.to_i+#@x.to_i+#@y.to_i -resize 200x200"

  #return string of the convert options I want
  @get_coor = cropper

end

belongs_to :user
default_scope ->  order(created_at: :desc) 

has_attached_file :muse_img, styles: lambda  |attachment|  original: (attachment.instance.get_coor)  

validates_attachment :muse_img, presence: true,
                 content_type:  content_type: ["image/jpeg"] ,
                 size:  in: 0..500.kilobytes 

end

我没有收到错误。但它的行为就像 get_coor 方法没有调用任何东西。

在此之前,我直接在 convert_options 上尝试了字符串插值,但对于所有坐标,它始终显示为 nil。我是 Rails 和 Ruby 的新手,所以我对 lambdas 还是有些模糊。希望这只是一个语法错误。感谢您的帮助!

【问题讨论】:

【参考方案1】:

解决方案似乎是我将参数放入 params 方法的顺序。我必须先放坐标,然后再放图像。我在这里找到了它:

https://github.com/thoughtbot/paperclip/issues/1533

我还更改了 has_attached_file 部分,但我不知道这是否与问题有关。但无论如何,它就在这里。

has_attached_file :muse_img,
:styles => lambda  |attachment| 

    crop_convert_options = attachment.instance.get_coor

    
        original: 
            convert_options: crop_convert_options
        
    

【讨论】:

以上是关于在 Paperclip 和 Rails 4 中将 Jcrop 坐标转换为 convert_options的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Paperclip在Rails 4中上传多个图像

Rails 3 和 Paperclip:“'identify' 命令无法识别”

Rails 和 Paperclip - 调整大小问题

Paperclip + Rails 与负载平衡机器

Rails:Paperclip 为相似的视频产生不同的结果

使用Paperclip保存照片时,Rails app“无法分配内存”