カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

PHPでサムネイルを作る[PHP with GD]

この記事は最終更新日から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,103 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です