【问题标题】:Rails 3, Paperclip and uploading image from remote urlRails 3,回形针和从远程网址上传图片
【发布时间】:2011-01-31 13:23:31
【问题描述】:

我编写了简单的代码,它获取图像的 url,并将调整大小的版本上传到 Amazon S3 存储。代码如下所示:

  attr_accessor :profile_image_url

  has_attached_file :avatar, 
    :default_url => "/system/avatars/:style_default.png",
    :styles => { 
      :original => "128x128#",
      :thumb => "48x48#"
    },
    :storage => :s3, 
    :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
    :path => "/avatars/:id/:style.:extension"

  before_validation :download_profile_pic
...

  def download_profile_pic
    begin
      io = open(URI.parse(self.profile_image_url))
      def io.original_filename; base_uri.path.split('/').last; end
      self.avatar = io.original_filename.blank? ? nil : io  
    rescue Timeout::Error
      self.avatar = nil
    rescue OpenURI::Error => e
      self.avatar = nil
    end
  end

它可以工作,但上传的图片质量非常低。可能是什么问题?

【问题讨论】:

  • 你的原图会变成"128x128" px,这是你的本意?定义低质量,压缩率?
  • 这是正确的 - 我的原始图像尺寸是“128x128”,我尝试通过这样的方式定义质量:style=>{:thumb=>{:quality=>100,.. .}} 它仍然返回相同的结果
  • 嘿,这很好用!我想知道,你能解释一下'def io.original_filename; base_uri.path.split('/').last;结束'行有点?你在这里声明一个函数吗?分号是干什么用的?
  • @TenJack 这个语句 "def io.original_filename; base_uri.path.split('/').last; end",打开 "io" 对象,向它插入一个名为 "original_filename" 的新方法,这仅在执行方法“download_profile_pic”时完成。分号可用于在一行中包含多行代码(如果这有意义(在上面的代码中,相同的东西可能已经写成 3 行))。另外我想指出,这段代码不是我的,是某个聪明的家伙写的,我只是稍微修改了一下(就我记得的)。

标签: ruby-on-rails image paperclip


【解决方案1】:

看起来问题是您的主图像大小上的几何字符串,请尝试更改:

:styles => { 
  :original => "128x128#",
  :thumb => "48x48#"
},

:styles => { 
  :original => "128x128>",
  :thumb => "48x48#"
},

只有在尺寸太大时才应该调整/转换图像。

【讨论】:

    猜你喜欢
    • 2016-06-05
    • 2015-05-09
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多