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(); // 呼び出した画像情報を消す