17

Carrierwaveを使用して、次の行を使用して、アバターの3つのバージョン(オリジナル、small_thumb、large_thumb)を作成しました。

process :resize_to_limit => [400, 400]  

   version :big_thumb do
     process :resize_to_limit => [80, 80]
   end

   version :small_thumb do
     process :resize_to_limit => [50, 50]
   end

AvatarUploaderクラスに次のメソッドを追加しました。

def reprocess(x,y,w,h)
        manipulate! do |img|
            img.crop(x.to_i, y.to_i, w.to_i, h.to_i, true) 

            end
resize_to_limit(180,180)  
end

これは、更新が実行された後に私のモデルで呼び出されます。

attr_accessor :crop_x, :crop_y, :crop_w, :crop_h
after_update :reprocess_image, :if => :cropping?

def cropping?
    !crop_x.blank? && !crop_y.blank? && !crop_w.blank? && !crop_h.blank?
end

private

def reprocess_image
image.reprocess(crop_x,crop_y,crop_w,crop_h)

end

元のバージョンをトリミングしてサイズを変更できましたが、2つのサムネイルを一緒に更新できないようです。私は無駄にいくつかの異なるテクニックを試しました。

助言がありますか?

4

5 に答える 5

54

試す

image.recreate_versions!

申し訳ありませんが、バスで。それについては説明できません。

于 2011-03-10T22:03:25.167 に答える
3

image.cache_stored_file!電話をかける前に電話する必要がありますrecreate_versions!

メソッド自体がファイルがキャッシュされている場合にそれを呼び出すので奇妙ですが、何らかの理由でそれは機能していませんでした。

つまり、次のようになります。

def reprocess_image
  image.reprocess(crop_x, crop_y, crop_w, crop_h)
  image.cache_stored_file!
  image.recreate_versions!
end
于 2011-09-20T18:37:32.783 に答える
3

このHowToは私にとって最も役に立ちました(フォグを使用していなくても):

https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Recreate-and-reprocess-your-files-stored-on-fog

モデルに再処理メソッドを追加し、それをrakeタスクのループごとに呼び出しました。

  def reprocess
    begin
      self.process_photo_upload = true
      self.photo.cache_stored_file!
      self.photo.retrieve_from_cache!(photo.cache_name)
      self.photo.recreate_versions!
      self.save!
    rescue => e
      STDERR.puts  "ERROR: MyModel: #{id} -> #{e.to_s}"
    end
  end

レーキ:

task :reprocess_photos => :environment do MyModel.all.each{|mm| mm.reprocess} end

PS:Rails 4.2

于 2015-07-04T12:19:29.117 に答える
1

私は試していませんが、多分何かを入れています。

def reprocess_image
  image.reprocess(crop_x,crop_y,crop_w,crop_h)
  image.recreate_versions!
end
于 2011-04-30T17:09:47.740 に答える
1

この最新のRailsCastを確認してください。

http://railscasts.com/episodes/182-cropping-images-revised

画像の1つのバージョンをトリミングした後、他のバージョンのトリミング座標を計算するか、元の画像の他のバージョンと同じアスペクト比でトリミングされた画像を縮小することができます。

于 2011-12-04T07:24:08.053 に答える