2

私は周りを見回していて、私が逃した場合に備えて、誰もが画像のサイズを変更するために何を使用するのか知りたいです。

私はphpimageGDライブラリimagejpeg()ectを使用しています。

私はクラスを継続的に更新して、この1つの状況を「解決」しようとしています。

ユーザーがアップロードする画像が469x358である場合、たとえば、ディスプレイの最終画像は120x80ボックス内に収まるように設計されている必要があります。幅に基づいてサイズを変更すると、サイズ変更された画像は120x92になり、高さを修正できますが、画像がピクセル化または押しつぶされ、imageGDまたはcssオーバーフローのいずれかを非表示にして端を切り取ることができます。

ざっと見てみると、画像を縮小してつぶれないように縮小するために使用できるアルゴリズム(バイキュービックなど)があることがわかりました。これは、imageGDで得られる継続的な効果です。誰かがこのアルゴリズムを使用しましたか?

ImageMagickがこのソフトウェアを使用したこともありますか?画像をよりよく縮小しますか?

私は現在、オーバーフローを非表示にして端を切り取っていますが、より良い方法はありますか?

4

2 に答える 2

2

ユーザーがアップロードする画像が469x358である場合、たとえば、ディスプレイの最終画像は120x80ボックス内に収まるように設計されている必要があります。幅に基づいてサイズを変更すると、サイズ変更された画像は120x92になり、高さを修正できますが、画像がピクセル化または押しつぶされ、imageGDまたはcssオーバーフローのいずれかを非表示にして端を切り取ることができます。

画像が358x469(ポートレート)で、画像が歪んで見えないように画像のサイズを120x80に変更したい場合は、次のように計算します。

358/469 = width/80 => width = 358*80/469 = 61px (approx)

最大の高さと制限された幅を使用する、より高い画像がありました。120pxの望ましい幅は、画像が水平方向に引き伸ばされることを意味します。より優れたアルゴリズムでは、滑らかさを実現することしかできませんが、より優れたアルゴリズムでは、押しつぶされた/引き伸ばされた画像を正常に見せることはできません。

フィッティングが必要な場合は、サイズに合わせてサイズを変更することをお勧めします。これは、サーバー側でGD library / ImageMagickを使用して、またはクライアント側でCSSバックグラウンドポジショニングを使用して実行できます。GDを使用している場合、トリミングは、負のオフセットを使用して画像のサイズを変更するのと同じくらい簡単です(負のbackground-positionを使用したCSS背景の配置にいくらか似ています)。

編集1

GDとIMのどちらを使用するかという問題の場合は、IMをお勧めします。出力の品質についてはよくわかりませんが、パフォーマンスに関しては、特に高解像度の画像を扱う場合、IMはGDよりも優れたパフォーマンスを発揮します。GDを使用する場合は、GDライブラリ関数を使用すると、CPUやメモリの使用量が増えるimagecopyresampledよりも良い結果が得られます。imagecopyresized

編集2

言及するのを忘れました。ずっと前にGDの使用をやめ、phpThumbに切り替えました。雑用のほとんどを処理します。内部的にはGDやIMを使用します。組み込みのインテリジェンスにより、特定の操作に最適な方法を選択できます。

于 2011-06-09T07:34:35.960 に答える
0

決めるのに役立つかもしれないいくつかのポイント。

  • ImageMagick と gd2 からのリサンプリングされた出力は、ほとんど同じでした。gd2 がどのようなリサンプリングを実行するのかはわかりませんし、ImageMagick がバイキュービック補間を使用していることはかなり確信していますが、ほとんどの場合、バイキュービックおよびバイリニア リサンプリングは、ダウンサイジング中に実質的に同一の出力を生成します。小さな画像のアップスケーリングは、バイキュービック補間が際立っているところです。(それでも、バイキュービック補間とバイリニア補間の違いが際立っている病的なケースがいくつかあります。http://en.wikipedia.org/wiki/Aliasingを参照してください) 。

  • CLI バージョンは画像のリサンプリングが非常に高速でしたが、PHP で ImageMagick モジュールを使用する機会はあまりありませんでした。Imagickモジュールが同様に高速であると仮定すると、高速なパフォーマンスが見られるはずです。ただし、gd2 の場合、速度が少し問題でした。ページごとに 50 個ほどのサムネイルを生成するために頻繁に使用しましたが、遅延が目立ちます。

  • gd2 はほとんどの PHP インストールの一部であり、API は非常に簡単に使用できます。ImagickPECL拡張のようです。ホスティングプロバイダーによっては、問題になる場合とそうでない場合があります。

そうは言っても、サイズ変更された画像をキャッシュすることは、ほとんどの場合、より良い考えであることを指摘させてください。特に、同じ画像が頻繁にサイズ変更されることが確実な場合はそうです。たとえば、オンライン ショップを作成していて、画像のサムネイルを表示したい場合、同じ画像セットを何度もリサイザーで実行すると、特に問題が発生します。画像の可変性が高いアプリケーション向けの OTOH では、オンザフライでのサイズ変更がより適切なオプションになる可能性があります。

于 2011-06-08T18:13:24.797 に答える