0

トンボを使用すると、次のことができます。

image.thumb('300x300#')

これにより、画像のサイズが変更され、縦横比が維持され、中央がトリミングされます (最も長いエッジの端が効果的に切り取られます)。

ただし、画像の端が 300px より小さい場合は、上に拡大されます。この場合、画像のサイズは変更されませんが、必要に応じて白いパディングが追加されます。

したがって、基本的には、両方のエッジが 300px 以上の場合、通常の動作300x300#が必要ですが、いずれかのエッジが 300px より小さい場合、画像のサイズはまったく変更されませんが、必要に応じて空白を追加して 300x300 にトリミングされます。

これは、Dragonfly のビルトイン プロセッサ (#thumbまたは#convert? または、独自のプロセッサを構築する必要がありますか? もしそうなら、どのような種類の imagemagick コマンドを調べる必要がありますか?

4

2 に答える 2

1

SOの自分の質問に答える癖があります...

Dragonfly では次のことができます。

def thumb_url
  if image.width < 300 || image.height < 300
    image.convert('-background white -gravity center -extent 300x300').url
  else
    image.thumb('300x300#').url
  end
end
于 2015-02-06T19:45:30.867 に答える
1

最善の解決策は、300x300 の白いキャンバス イメージを作成し、そのイメージをキャンバス イメージの上に中央揃えで合成することです。次に、重心(中央揃え)でトリミングします。これにより、寸法が 300 より小さい縦または横のエッジに白いキャンバスがある 300x300 の画像が生成されます。


** このソリューションでは、必要な ImageMagick 操作が Dragonfly によって拡張されているとは思えないため、RMagick gem をインストールする必要がある場合があります。

これは私がそれにアプローチする方法です:

#Set file path first and load a white image called canvas that is 300x300 into Imagmagik
canvas_file_path = "#{Rails.root}/app/assets/images/canvas.png"
canvas_image = Magick::Image.read(canvas_file_path).first

#Then perform the compositing operation.  This overlays your image on top of the canvas, center gravity ensures that your image is centered on the canvas.
canvas_image.composite!(<YOUR IMAGE>, CenterGravity, Magick::OverCompositeOp)

#then  write the file to a temporary file path so you can do something with it
temporary_file_path = "#{Rails.root}/tmp/#{@model.id}"
canvas_image.write(temporary_file_path)

必ずファイルに require ステートメントを追加してください。大文字と小文字の区別に細心の注意を払ってください。Rmagick ではなく RMagick です。

require "RMagick"



参考までに、必要な合成操作を実行するためのドキュメントの ImageMagick の例を次に示します。

composite -gravity center smile.gif rose: rose-over.png

ここに画像の説明を入力


画像を合成する方法に関する Rmagick ドキュメント - http://www.imagemagick.org/RMagick/doc/image1.html#composite

Rmagick ジェム - https://github.com/rmagick/rmagick

合成に関する ImageMagick リファレンス - http://www.imagemagick.org/script/composite.php

于 2015-02-06T14:26:21.673 に答える