私のサイトのユーザーは、アバターとして使用される画像をアップロードします。アップロード制限サイズを 2 MB に設定しました。ほとんどの場所では、サムネイルのみが必要です。しかし、ユーザーははるかに大きな解像度の画像をアップロードします。これらのファイルをファイル システムに保存します。
大きなサイズのファイルの代わりにサムネイルを作成して保存するにはどうすればよいですか?
私のサイトのユーザーは、アバターとして使用される画像をアップロードします。アップロード制限サイズを 2 MB に設定しました。ほとんどの場所では、サムネイルのみが必要です。しかし、ユーザーははるかに大きな解像度の画像をアップロードします。これらのファイルをファイル システムに保存します。
大きなサイズのファイルの代わりにサムネイルを作成して保存するにはどうすればよいですか?
インストール/サーバーのセットアップに応じて、いくつかの可能性があります。
imagecopyresized
機能のようなものを使用できますImagick extension
または、 とそのthumbnailImage
メソッドのようなものを使用できます。私はGDがインストールされていないサーバーを見たことがないと言います.Imagickの場合、デフォルトでインストールされる可能性は低いです:-(
別の解決策は、convertコマンドライン ユーティリティ(ImageMagick に付属しています。PHP 拡張機能とは無関係です)をexec
呼び出すことです。
利点は、サイズ変更が外部ツールによって実行されるため、によって制限されないことmemory_limit
です-しかし、もちろん、アプリケーションが外部ツールに依存することも意味します。これは常にではありません良い...
必要に応じて、GD に関するチュートリアルがたくさんあります。たとえば、それらはあなたに興味があるかもしれません:
GD モジュールまたはImageMagick モジュールを使用して、アップロードされた画像のサイズを変更および縮小できます。
「PHP image resizer」などをグーグルで検索すると、多くの例が見つかります。私は GD を使用する傾向があります。これは、問題なく動作する古いコードを使用しているためです。で見つかった既知のアップロードされた jpeg 画像があると仮定すると$srcImgPath
、次のようなことができます。ここで、$newWidth
と$newHeight
は必要な画像の新しいサイズです。
list($width, $height, $type) = getimagesize($srcImgPath);
$srcImg = imagecreatefromjpeg($srcImgPath);
if ($srcImg === false) return false;
$workImg = imagecreatetruecolor($newWidth,$newHeight);
imagecopyresampled($workImg,$srcImg,0,0,0,0,$newWidth,$newHeight,$width,$height);
imagejpeg($workImg,$newFilename,$quality);
必要に応じて機能し、必ず指定して$quality
ください。このコードを抽象化して、gif と png を非常に簡単に処理することもできます。
GD ルートをたどる場合は、imagecopyresampled を使用してください。よりきれいな画像が生成されるためです。つまり、ざらつきやピクセルのように見えないということです。
関数に関する PHP マニュアルへのリンク: http://us2.php.net/manual/en/function.imagecopyresampled.php
timthumb.php スクリプトをお勧めします。それは堅実です。 http://www.darrenhoyt.com/2008/04/02/timthumb-php-script-released/
gd ライブラリ、特にimagecopyresized 関数を確認してください
Google AppEngineにはPILのサブセットが搭載されていませんか?使用できる「サイズ変更」機能があります...そして何よりも、無料のクォータを取得しています!
PHPセットアップにImagickがインストールされている場合。次に、これを行う関数があります。Imagick::thumbnailImage()
Imagick をお持ちでない場合は、GD ライブラリが役に立ちます。彼らはimagcopyresized()を持っているので