- PHP
- 2016-09-08
この記事は最終更新日から1年以上経過しています。
PHPでは画像をコピーして、リサイズすることができます。
今回はサムネイルを作成する方法をご紹介します。
実行するにはGDライブラリが必要となります。
GDライブラリのインストールについてはまた別の機会に。
まずは元のファイルと保存するファイルを設定します。
$original_file = "src.jpg"; $saveto_file = "dst.jpg";
元画像のサイズを取得します。
list($width, $height) = getimagesize($original_file);
作成するサムネイルのサイズを設定します。
ここでは、元画像の3分の1としています。(小数点以下は四捨五入)
$new_width = round($width / 3); $new_height = round($height / 3);
元画像のリソースを取得する
$original_image = imagecreatefromjpeg($original_file);
新しいリソースを作成する
$new_image = imagecreatetruecolor($new_width, $new_height);
元画像のリソースから新規リソースへイメージをコピーしてリサイズするには、以下のような関数を実行します。
bool imagecopyresized ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
dst_image | 新規リソース |
---|---|
src_image | 元画像リソース |
dst_x | コピー先の起点X座標 |
dst_y | コピー先の起点Y座標 |
src_x | コピー元の起点X座標 |
src_y | コピー元の起点Y座標 |
dst_w | 新しい画像の幅 |
dst_h | 新しい画像の高さ |
src_w | 元画像の幅 |
src_h | 元画像の高さ |
先ほどの続きからの実行例がこちら
imagecopyresized($new_image, $original_image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
ただし、上記のimagecopyresizedだと画像が荒くなってしまう場合があります。
その時はimagecopyresampled関数を使います。※引数は同じ
保存の処理をします。
if(imagejpeg($new_image, $saveto_file)) { echo 'success'; } else { echo 'failure'; }
GIFで保存する場合はimagegif関数を使います。
imagegif($new_image, $saveto_file)
メモリを解放して終了
imagedestroy($original_image); imagedestroy($new_image);
また画像を保存せずに出力するだけの場合は以下のようにしてください。
// ヘッダーを設定 header('Content-Type: image/jpeg'); // 画像を出力 imagejpeg($new_image); // メモリを開放 imagedestroy($new_image);
公式リファレンス:
http://php.net/manual/ja/ref.image.php
1,090 views