ユーザーが写真をアップロードしたときに画像を処理していますが、私の問題は高解像度の写真です。ユーザーがアップロードしたことをどのように検出しますか? PHP の GD ライブラリを使用しています。imagejpeg() メソッドで品質を 90 に設定しても何も起こりませんが、寸法をスケーリングしてから ppi を 72 に設定します。寸法を維持しながら ppi を同時に 72 に落としたいと考えています。アドバイスをいただければ幸いです。
6 に答える
あなたが心配する必要がある限り、PPIのようなものはありません。また、DPIはデジタルには存在しません。ピクセルと寸法(いずれかの方向のピクセルの測定値)のみがあります。
あなたが本当にやろうとしているのは、画像をダウンサンプリングして、画像の全体的なサイズを小さくすることです。リサンプリング後に画像が引き伸ばされて表示されないように、幅と高さの比率を同じに保ちたいということです。また、サイズ変更とリサンプリングは、サイズ変更がコンテンツにあまり注意を払わず、視覚的に非常に貧弱なサイズ変更画像になるという点で異なります。おそらくリサンプリングが必要です。
PHPのドキュメントには、アップロードされたファイルの処理と、GDImageライブラリを使用して画像のサイズを変更する方法に関する優れた例がいくつかあります。ぜひチェックしてみてください。あなたが知りたいと思うかもしれない他の関連する方法:
- getimagesize()を使用すると、画像を開かずに画像のサイズを確認できます(画像を読み込まずにサイズを変更する必要があるかどうかを確認するのに便利です)。
- imagesx()およびimagesy()は、GD画像リソースの寸法を取得します。
bool Imagick::setResolution ( float $x_resolution , float $y_resolution )
高解像度の画像を頻繁に扱っている場合は、ImageMagick パスの方が高速なので + 画像に関するより多くの情報を提供します + 必要に応じて 300 DPI (または他の解像度) で画像を書き戻すことができます.
これが私がJcropとImageMagickで行うことです(ただし72 DPIで)
$picture = new Imagick($src);
$picture->cropImage( $_POST['w'], $_POST['h'], $_POST['x'], $_POST['y']);
$picture->resizeImage(690, 500, Imagick::FILTER_LANCZOS,1, true);
$picture->writeImage($cropped);
$picture->clear();
$picture->destroy();
phpthumb ( http://phpthumb.gxdlabs.com ) を使用することは、優れたエレガントで簡単なソリューションです。
GitHub にアップロードされた、それを使用した実際のコード例があります。GD と Imagemagick の両方を使用できます。
ppiを削減する場合、削減を反映してサイズが変更されます。1インチあたりのピクセル数が少ないということは、画像のインチ数が少なくなることを意味します。