スライドショー

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

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

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

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

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

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

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

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

【解説】PHPのGDについて

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

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

GDに出来ること

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

getimagesize・・・画像のサイズの取得

imagecopyresampled・・・コピーと伸縮

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と同じ階層に出力

流れとしては以下です。


getimagesizeimagecreatefromjpegimagecreatetruecolorで画像を作る準備をします。
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も記憶の片隅に持っておいてください。

それでは、また。

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

つぶらや

つぶらや

独学PG&SE、東京在住30代女性。
誰でもプログラマーになれるがモットーで、わかりやすい記事を目指しています。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説