ノラプログラマーの技術メモ

ネットで調べても出てこなかった情報を載せていきたい技術系ブログ。

JPGやPNGのサムネイルを表示するPHPプログラムのサンプル(GDライブラリを使用)

JPGやPNG形式の画像をサムネイル表示するPHPプログラムを作ったのでその記録。

画像処理にはGDライブラリを使用するので、GDが使用可能かどうかを事前に調べておく。

適当なファイル(例:info.php)を作って、下記の内容を書き込む。

<?php
    phpinfo();
?>

適当なファイル(例:info.php)をサーバーにアップロードして、ブラウザからアクセスする。

するとPHPの設定が表示されるので、GDの項目が「enable」になっていることを確認する。

f:id:kawai_norimitsu:20190827092009p:plain

「enable」になっていない場合は、自力でぐぐってGDライブラリをインストールしておくこと。

さて、サムネイルを表示するPHPのサンプル(例:thumbnail.php)は次の通り。

<?php
ini_set("gd.jpeg_ignore_warning", 1);

$width = 150; // 画像横幅を指定
$url = "https://s.yimg.jp/images/top/sp2/cmn/logo-170307.png"; // 画像URLを指定

list($image_w, $image_h) = getimagesize($url);
$proportion = $image_w / $image_h;
$height = $width / $proportion;
if($proportion < 1){
	$height = $width;
	$width = $width * $proportion;
}

if(strpos($url, '.png') !== false) {
	$image = imagecreatefrompng($url);
	header('Content-type: image/png');
}
else {
	$image = imagecreatefromjpeg($url);
	header('Content-type: image/jpeg');
}

$canvas = imagecreatetruecolor($width, $height);
imagecopyresampled($canvas, $image, 0, 0, 0, 0, $width, $height, $image_w, $image_h);
imagejpeg($canvas, NULL, 100);
imagedestroy($canvas);

ポイントは1行目の「gd.jpeg_ignore_warning」だろう。

これを指定しておくことで、ファイルサイズが大きなJPGでも警告を無視して表示できるようになる。

あとは画像ヘッダーの指定かな。

「Content-type: image/png」もしくは「Content-type: image/jpeg」を適宜指定するようにしておく。

画像形式によらず、imagejpeg関数でOKなのはちょっと驚き。

さて、このサムネイル表示プログラム(例:thumbnail.php)をHTMLから呼び出すには、次のように記述する。

<img src="thumbnail.php">

以上、お疲れ様でした。