1

Paperclip を使用して画像を保存していますが、切り抜いた/回転した画像をサムネイルとして作成したいと考えています。Paperclip が実行する必要がある PROPER コマンドは次のとおりです。

convert [file].jpg -gravity center -distort SRT -30 -quality 100 -antialias -flatten -background white -unsharp 0.3x0.3+5+0 -crop 433x433+69+88 +repage -resize "300x300>" [file].jpg

これにより、私が望む結果が得られます。imagemagickをインストールしたPCで直接テストしました。ただし、サーバーのログを見ると、これらの引数の順序が異なります。Paperclip は次のことを望んでいます。 a)-resize "300x300>"コマンドを最初に配置し、次にコマンド-crop 433x433+69+88を配置し、その後に残りの引数を配置します。これにより、最終的なイメージの外観が変わります。私が欲しいものではありません。ログに出力される内容は次のとおりです。

convert [file].jpg -auto-orient -resize "300x300>" -crop 433x433+69+88 +repage -gravity center -distort SRT -30 -quality 100 -antialias -flatten -background white -unsharp 0.3x0.3+5+0 [file].jpg

...そして、ここに私のモデルの私の設定があります:

ワイン.rb

has_attached_file :photo, :styles => {
                    :thumb => {
                    :geometry => "300x300>",
                    :format => :jpg,
                    :processors => [:cropper, :recursive_thumbnail],
                    :thumbnail => :croppable
                    },
                    :general => ["150x375", :jpg],
                    :show => ["x425", :jpg],
                    :croppable => ["1200x1200>", :jpg]
        },
        :url  => "/assets/wines/:style/:wine_name",
        :path => ":rails_root/public:url",
        :default_url => ":wine_default",
        :default_path => ":rails_root/public:wine_default",
        :default_style => :show,
        :convert_options => {
            :thumb => '-gravity center -distort SRT -30',
            :croppable => '-gravity center -extent 1200x1200',
            :general => '-gravity center -extent 150x375 -quality 95',
            :all => '-quality 100 -antialias -flatten -background white -unsharp 0.3x0.3+5+0'
        },
        :processors => [:thumbnail, :compression]

基本的に、[:geometry][:transformations][:convert_options] の順序で convert.exe を実行します。

必要な順序で物事を取得するにはどうすればよいですか?

recursive_thumbnail.rb -- 元のファイルではなく :croppable から :thumb サムネイルの生成を実行するため (トリミング時の水平パディングの問題のため)

module Paperclip
    class RecursiveThumbnail < Thumbnail
    def initialize file, options = {}, attachment = nil
        super Paperclip.io_adapters.for(attachment.styles[options[:thumbnail] || :original]), options, attachment
    end
    end
end

クロッパー.rb

module Paperclip
    class Cropper < Thumbnail
    def transformation_command
        if crop_command
        super.join(' ').sub(/ -crop \S+/, '').split(' ') + crop_command
        else
        super
        end
    end

    def crop_command
        target = @attachment.instance
        if target.cropping?
        ["+repage", "-crop", "#{target.crop_w}x#{target.crop_h}+#{target.crop_x}+#{target.crop_y}", "+repage"]
        end
    end
    end
end
4

2 に答える 2

0

同じ問題があり、トリミングとサイズ変更の順序を変更できないことに気付きました。しかし、私が望んでいた結果を得ることができる小さなハックを行うことができました. モデルに別の画像添付ファイルを作成しました。

has_mongoid_attached_file :cropped_image, {:styles => :original => '1920x1680>', :processors => [:cropper]}

元のサイズで画像のみをトリミングします。次に、他の画像は次のようになります。

has_mongoid_attached_file :image, {:styles => IMAGE_STYLES, :processors => [:thumbnail]}

これには、さまざまなサイズのサムネイルがすべて含まれ、すべてのサイズ変更が行われます。だから、トリミングした後、私は次のようなことをします:

self.image = self.cropped_image
self.save

最も理想的な方法ではありませんが、パフォーマンスをあまり犠牲にすることなく、やりたいことができました。

于 2014-01-10T20:17:46.733 に答える