PHPでJPEG画像をPNG画像に変換する

(1/1)
GDライブラリを使うと、画像のフォーマットを変換することができる。そこで、クライアントPCにあるJPEG画像ファイルをPNG画像ファイルに変換するプログラムを作ってみることにする。

(2022年2月27日) PHP8対応,大幅改訂

目次

サンプル・プログラムの実行例

PHPでJPEG画像をPNG画像に変換する

サンプル・プログラム

圧縮ファイルの内容
jpg2png.phpサンプル・プログラム本体

準備

PHPでGDライブラリが有効になっていることが必要だ。
あらかじめ関数  phpinfo  を実行し、GD Support が enableになっていることを確認すること。

解説:画像ファイルの変換

0220: //JPEG→PNG変換
0221: if (function_exists('imagecreatefromjpeg')) {
0222:     if ($fname != '') {
0223:         $img = @imagecreatefromjpeg($fname);
0224:         if (! $img) {
0225:             $errmsg = '"' . $_FILES['upload']['name'] . '" はJPEG画像ファイルではありません';
0226:         } else {
0227:             $errmsg = '';
0228:             header("Content-Type: image/png");
0229:             header("Content-Disposition: attachment; filename=image.png");
0230:             imagepng($img);
0231:             exit(0);
0232:         }
0233:     }
0234: else {
0235:     $errmsg = 'GDライブラリが実装されていません';
0236: }
0237: 
0238: //表示HTML作成

念のため、組込み関数  function_exists  を使い、GDライブラリがインストールされている――関数  imagecreatefromjpeg  が存在する――ことをチェックしておく。

画像ファイルがサーバにアップロードされたかどうかは、変数 $_FILES["image"] の有無で場合分けする。

アップロードされた画像ファイルはテンポラリ・ファイル $_FILES["image"]["tmp_name"] に格納されている。
このファイルからGD関数  imagecreatefromjpeg  によってGDイメージストリームを生成する。指定した画像ファイルがJPEGでなければ関数  imagecreatefromjpeg  は 0 を返すので、エラーメッセージを変数 $errmsg に設定する。

GDイメージストリームが生成されたら、関数  imagepng  を使って PNG イメージとしてブラウザに表示させる。

さらに、保存ファイル名を指定してブラウザから保存できるようにするため、header("Content-Disposition: attachment; filename=image.png") を追加した。
この行を無効にすると、PNG画像としてブラウザ上に表示される。ところが、Microsoft の IE 7 では、この方法でブラウザに表示された画像ファイルを保存することができないようだ。

参考サイト

(この項おわり)
header