概要
GD(Graphics Draw)はPHPで画像処理を実装するためのライブラリです。
画像の圧縮やサイズ変更、回転だけではなく、フォーマット変換や複数画像の組み合わせ等、さまざまな操作を行うことができます。
今回は、画像のサイズ変更・圧縮の方法について紹介します。
環境構築
今回の記事では割愛します。
一般的なレンタルサーバであればデフォルトで使えるようです。
Xserverでは問題なく使えました。
コード
jpeg画像をサイズ変更・圧縮
// サイズ変更・圧縮前画像
$filePath = "old.jpg";
// 生成する画像のファイル名
$newPath = "new.jpg";
// 画像サイズ(何倍にするか?)
$resizeRate = 0.5;
// 数字を大きくするほど高画質(0~100)
$quality = 90;
$sourceImage = imagecreatefromjpeg($filePath);
// 元の画像の幅と高さを取得
$sourceWidth = imagesx($sourceImage);
$sourceHeight = imagesy($sourceImage);
// 新しい幅と高さを計算
$newWidth = (int)($sourceWidth * $resizeRate); // 幅を縮小する
$newHeight = (int)($sourceHeight * $resizeRate); // 高さを縮小する
// 新しい画像を作成
$compressedImage = imagecreatetruecolor($newWidth, $newHeight);
// 元の画像を新しいサイズにリサンプリングしてコピー
imagecopyresampled($compressedImage, $sourceImage, 0, 0, 0, 0, $newWidth, $newHeight, $sourceWidth, $sourceHeight);
// 圧縮された画像を保存
imagejpeg($compressedImage, $newPath, $quality);
// メモリを解放
imagedestroy($sourceImage);
imagedestroy($compressedImage);
png画像をサイズ変更・圧縮
// サイズ変更・圧縮前画像
$filePath = "old.png";
// 生成する画像のファイル名
$newPath = "new.png";
// 画像サイズ(何倍にするか?)
$resizeRate = 0.5;
// 数字を小さくするほど高画質(0~9)
$quality = 8;
$sourceImage = imagecreatefrompng($filePath);
// 元の画像の幅と高さを取得
$sourceWidth = imagesx($sourceImage);
$sourceHeight = imagesy($sourceImage);
// 新しい幅と高さを計算
$newWidth = (int)($sourceWidth * $size); // 幅を縮小する
$newHeight = (int)($sourceHeight * $size); // 高さを縮小する
// 新しい画像を作成
$compressedImage = imagecreatetruecolor($newWidth, $newHeight);
// 元の画像を新しいサイズにリサンプリングしてコピー
imagecopyresampled($compressedImage, $sourceImage, 0, 0, 0, 0, $newWidth, $newHeight, $sourceWidth, $sourceHeight);
// 圧縮された画像を保存
imagepng($compressedImage, $newPath, $quality);
// メモリを解放
imagedestroy($sourceImage);
imagedestroy($compressedImage);
参考
・PHP公式:imagejpeg
・PHP公式:imagepng
コメント