phpによる画像リサイズをGDからImagickへ変更してみる

画像リサイズを伴うシステムをサーバ移行したら使えなくなってしまった。
Fatal error: Uncaught Error: Call to undefined function imagecreatefromjpeg()

imagecreatefromjpeg()が使えていなくてエラーですね。

参考ページ)
https://pentan.info/php/gd_jpeg.html

phpinfo()では、GDはインストールされているようだが、JPG Supportがない

libjpegを入れろということなのかな?

自分が触れないサーバだったため、サーバ管理者へインストールなど頼むのはちょっと申し訳ない。
ImageMagicを使う方法へ書き換えることにする。

昔作成したプログラム内で GIFの場合にはGDを使わなかったか何かトラブルがあって使えなかったかで、convertコマンドをexecから叩いて実行したことがあった。
exec(‘/usr/bin/convert ‘.$src.’ -coalesce -resize ‘.$new_width.’x’.$new_height.’ -deconstruct ‘.$dst);

$new_widthと$new_heightには、リサイズ後の画像幅と高さが入っている変数。
昔のことですっかり忘れていたが。
今回は、PHPでImageMagickを使えるようにする拡張モジュールImagickを使うことにする。

参考ページ)
https://www.sejuku.net/blog/74338

 ■GD版(細かいところは省略)

list($cur_width, $cur_height) = getimagesize( $src );

$source = imagecreatefromjpeg( $src );
$resized = $this->getImageResizeResouce($source, $cur_width, $cur_height, $new_width, $new_height);
imagejpeg( $resized, $dst, 100 ); // 第三引数は画質、0〜100、デフォルト75

function getImageResizeResouce($source, $cur_width, $cur_height, $new_width, $new_height) {
  $resized = imagecreatetruecolor($new_width, $new_height);
  imagecopyresampled( $resized, $source, 0, 0, 0, 0, 
  $new_width, $new_height,
  $cur_width, $cur_height );
  return $resized;
} 

■Imagick版

$image = new Imagick($src); // コピー元の呼び出し
$image->thumbnailImage($new_width, $new_height); // リサイズ
$image->writeImage($dst); // 書き出し
$image->clear(); // 呼び出した画像情報を消す