2011-01-31 10 views
7

私は画像のURLを取得し、Amazon S3ストレージにそれのサイズ変更されたバージョンをアップロードする簡単なコードを書いた。コードは次のようになります。Rails 3、ペーパークリップとアップロード画像をリモートURLから

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 

画像は非常に低い品質でアップロードされます。何が問題なのでしょうか?

+1

オリジナルの画像は「128x128」pxになります。これはあなたの意図ですか?低品質を圧縮率で定義しますか? – andrea

+0

これは正しいです - 私の元の画像の寸法は "128x128"で、これは次のようにして品質を定義しようとしました:style => {:thumb => {:quality => 100、...}}同じ結果 – spacemonkey

+1

ねえ、これは素晴らしいです!私は、あなたが 'def io.original_filename; base_uri.path.split( '/')。最後に;最後の行は少しですか?ここに関数を宣言していますか?セミコロンは何のためですか? – TenJack

答えて

1

それは問題があなたのメイン画像サイズにジオメトリ列であるように、変更してみてくださいになります。

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

寸法があまりにもしている場合のみ、変換/画像のサイズを変更する必要があります
:styles => { 
    :original => "128x128>", 
    :thumb => "48x48#" 
}, 

へ大。

関連する問題