2

私はPerl用のImageMagickを使用しています

use Image::Magick;

サイズ変更、サムネイル、寸法の読み取り、切り抜き、中央への切り抜きなど、必要なすべてのタスクを実行する関数型コードを作成しました。

すべての写真が横向きである必要があるため、高さが幅以上の画像をすべて破棄します。

私が苦労している問題は、サイズを変更する前にトリミングすることです。写真は4:3のアスペクト比である必要があります。一部の写真は新しい16:9形式で提供されるか、サーバーに送信される前にトリミングされている可能性があります。これにより、画面表示が歪んでしまいます。サイズを変更する前に、画像をトリミングして、4:3に最も近いものにします。たとえば、800/600は問題ありませんが、802/600は中心を800/600にトリミングします。

トリミングされたサイズに関係なく、すべての写真のサイズを最大保存画像の800/600に変更しますが、それは妖精とは無関係です。高さと幅の寸法を事前に読み取ることができるので、おそらく最も近い一致を計算するために利用できるアルゴリズムがあります。ImageMagick内にこれを実行できる関数がない限り、ImageMagickではなく、トリミングする新しいディメンションを取得するための支援が本当に必要です。

しかし、私はそうするものを見つけることに失敗しました。

4

1 に答える 1

8

私のために働いた:

my $image_width  = 800; # play with this when testing
my $image_height = 600;

my $target_aspect  = 4 / 3; 
my $current_aspect = $image_width / $image_height;

given ($current_aspect <=> $target_aspect) {
  when (1) { $image_width = int($image_height * $target_aspect); }
  when (-1)  { $image_height = int($image_width / $target_aspect); }
}
于 2012-02-24T14:09:19.770 に答える