こんにちは!独学プログラマー&ライターのつぶらやです。
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も記憶の片隅に持っておいてください。
それでは、また。