8

画像のサイズ変更とトリミングにImagemagickを使用しています。

テスト画像:

ここに画像の説明を入力してください

このために、300 x 320フレームのサイズに変更する必要があります。最初に画像のサイズを変更してからトリミングし、次のコマンドを使用しています。

exec("convert /uploadImagePath -thumbnail  300  /newImagePath");

exec("convert /newImagePath -gravity Center -crop 290x310+0+0 /newImagePath");

しかし、それは私に次のイメージを与えます

ここに画像の説明を入力してください

ご覧のとおり、画像は完全ではありません。どこが間違っているの?

4

2 に答える 2

52

(回答が更新され、以下の図解例が提供され-liquid-rescaleます)


元の画像のサイズは次のとおりです。

489 x 640 pixels

希望する寸法は次のようです。

290 x 310 pixels

これは、次のいずれかがないと、これらのディメンションにスケーリングできません。

  1. トリミング(最初の画像のすべての領域を保持しないでください)
  2. 希望の幅を維持する(希望の高さをあきらめる)
  3. 希望の高さを保つ(希望の幅をあきらめる)
  4. 歪み(スケーリング時にアスペクト比を維持しないでください)
  5. パディング(1つまたは複数のエッジにピクセルを追加)
  6. はっきりしないピクセルを削除する(「液体のリスケール」または「シームカービング」-ウィキペディアを参照

結果は「1」を示しています。(トリミング)、あなたは好きではありません。したがって、オプション「2」があります。(幅を維持)、「3」。(高さを保つ)、「4」。(ゆがみ)、「5」(パディング)と「6」。(シームカービング)テストのために残しました。

'2.':希望の高さを保つ

convert WPTgp.jpg -resize x310 keep-height.jpg

結果の画像のサイズは237 x 310 pixels。 (幅は自動的に決定されます)
Keep Height.... 高さを保つ

'3.':希望の幅を維持

convert WPTgp.jpg -resize 290x keep-width.jpg

結果の画像のサイズは290 x 380 pixels。 (高さを自動的に決定します)
Keep Width..... 幅を保つ

'4.':歪み

convert WPTgp.jpg -resize 290x310\! distorted.jpg

結果の画像のサイズは290 x 310 pixels。 (アスペクト比を無視します-寸法に合わせる必要がある場合は画像を歪めます)
Distorted...... 歪

'5.':パディング

convert WPTgp.jpg \
   -resize 290x310 \
   -gravity center \
   -background orange \
   -extent 290x310 \
    padded.jpg

結果の画像のサイズは290 x 310 pixels。(オレンジ色の背景は、画像の「拡張」が機能したことを示すためにのみ追加されました。) (アスペクト比を維持-目的の寸法に画像を拡張)
Padded......... パッド入り

'6。':シームカービング

convert WPTgp.jpg -liquid-rescale 290x310\! liquid.jpg

上記は、ImageMagickコマンドオプションリファレンスをすばやく読んで自発的に派生するコマンドです。ただし、うまく機能しないため、代わりに次を使用しました。

convert WPTgp.jpg -liquid-rescale 599x640\! -scale 290x310 liquid.jpg
convert WPTgp.jpg -liquid-rescale 599x640\! -scale 48.4%   liquid.jpg

さらに以下に、変更が必要な理由を説明します。申し訳ありませんが、現在、サンプル画像を提供することはできません。これには、追加のImageMagickデリゲート(リキッドリスケーリングライブラリ)をインストールする必要がありますが、現時点ではありません) 元のイメージの「リキッドリスケーリング」バージョンを作成する機会がありました。
Liquid-rescaled 「液体的に」再スケーリング
liblqr


シームカービングに関する警告/ '-liquid-rescale'

上記のように、最後の画像は、最初に提案したコマンドの結果ではなく、次の2つの変更されたバージョンのいずれかの結果です。

convert WPTgp.jpg -liquid-rescale 599x640\! -scale 290x310 liquid.jpg
convert WPTgp.jpg -liquid-rescale 599x640\! -scale 48.4%   liquid.jpg

489x610ピクセルの元の画像があり、290x310ピクセルに拡大縮小することが期待されていることを忘れないでください。ただし-liquid-rescale、一度に2次元で再スケーリングするのは得意ではありません。これは、一方向(水平または垂直)にのみスケーリングするように設計されています。両方を同時に実行しようとすると、期待した結果が得られない場合があります。最初に提案されたコマンドの結果は次のとおりです。

 convert WPTgp.jpg -liquid-rescale 290x310\! liquid.jpg

LQR gone wrong 液体のリスケールがうまくいかなかった

そのため、2つのステップで機能する2つの変更されたコマンドを思いつきました。

  1. まず、液体の再スケーリングを水平方向の寸法にのみ適用し、元の幅を489ピクセルから599ピクセルに拡大します。
  2. 次に、「通常の」アスペクト比維持スケーリングを中間結果に適用して、最終的な画像を生成します。
于 2012-07-30T12:14:23.217 に答える
4

試す:

$inputFile = "WPTgp.jpg";
exec("convert {$inputFile} -resize 290x310^ -gravity Center -crop 290x310+0+0 picCropped.png");
于 2012-07-30T11:54:57.983 に答える