PHPで画像をリサイズしよう!表示・保存方法もわかる

こんにちは!独学プログラマー&ライターのつぶらやです。

PHPで開発をしていると、画像を取り扱う時もあるでしょう。

そんな時に、渡された画像のサイズのが画面に合わないなどという事もあるかと思います。

もしくはアップロードした画像をリサイズして出力する必要もあるかもしれません。

本日はそんな時に使える、PHPでの画像リサイズについて以下の内容でお話しようと思います。

【解説】PHPのGDについて
【基本編】GDでリサイズする方法
【番外編】Imagickでリサイズする方法

PHPで画像のお悩みをお持ちの方も是非読んでください。

目次

【解説】PHPのGDについて

PHPにはGD(GDライブラリ)というものがあります。

これを使用する事によってPHPで画像処理を行う事ができます。

GDに出来ること

今回サンプルコードで使用する関数と、役割を書きます。

getimagesize・・・画像のサイズの取得[su_spacer size=”5″]
imagecopyresampled・・・コピーと伸縮[su_spacer size=”5″]
imagejpeg(※「image」の後は出力する画像形式によって変化)・・・画像の出力

他のGDの関数も知りたい場合は、公式を参考にしてください。

http://php.net/manual/ja/book.image.php

対応している画像形式

以下のような拡張子の画像形式に対応しています。

.png
.gif
.jpeg(.jpg)
.xbm
.bmp

前章で書きましたが、扱う画像の拡張子によって使用する関数が変わる場合があるので注意です。

imagejpegはjpegを出力する関数ですが、gifの場合はimagegifとなります。

【基本編】GD関数でリサイズする方法

それでは、GD関数で画像をリサイズして出力してみましょう。

今回は、実行するphpGd.phpファイルを置いたフォルダ内にtest.jpgがある事を前提とします。

phpGd.php
<?php
    list($width, $hight) = getimagesize('test.jpg'); // 元の画像名を指定してサイズを取得
    $baseImage = imagecreatefromjpeg('test.jpg'); // 元の画像から新しい画像を作る準備
    $image = imagecreatetruecolor(100, 100); // サイズを指定して新しい画像のキャンバスを作成
    
    // 画像のコピーと伸縮
    imagecopyresampled($image, $baseImage, 0, 0, 0, 0, 100, 100, $width, $hight);
    
    // コピーした画像を出力する
    imagejpeg($image , 'new.jpg');
?>
結果
new.jpgが、test.jpgと同じ階層に出力

流れとしては以下です。

①getimagesizeとimagecreatefromjpegとimagecreatetruecolorで画像を作る準備をします。
②imagecopyresampledで画像のコピーとリサイズをします。
③imagejpegで出力します。

因みにtest.jpg等、ファイル名を記載している部分はパス名を記載できます。

好きな場所に出力したり、好きな場所の画像をコピーする事ができます。

GDの使用方法についてご理解頂けましたでしょうか。

では、続いて次章ではGD以外のリサイズ方法を紹介します。

【番外編】Imagickでリサイズする方法

最後に、GD以外のリサイズ方法としてImagickを使用する方法をご紹介します。

ImagickはPHPの拡張モジュールです。

ImageMagickをPHPで使用するためのものなので、ImageMagickとImagickは別物です。

使用方法としては、phpinfo()を確認してimagickの項目があれば使用できます。

なければインストールをする必要があります。

以下のようなコードを書くことでリサイズができます。

<?php

$image = new Imagick("test.jpg"); // コピー元の呼び出し
$image->thumbnailImage(100, 0); // リサイズ
$image->writeImage("new.jpg"); // 書き出し

$image->clear(); // 呼び出した画像情報を消す
?>

対応している画像形式も出来ることもGDより多いのですが、画像をリサイズするだけの場合はGDで十分かと思います。

高度に画像を加工したい場合が将来発生するかもしれませんので、Imagickというキーワードも覚えておいてください。

まとめ

本日はPHPの画像のリサイズについてお話しました。

関わる案件によっては、画像について色々な要望が出てくる事もあると思います。

その時、どういう方法があるかを知っておくことが大切です。

GDだけではなく、Imagickも記憶の片隅に持っておいてください。

それでは、また。

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次