GD(Graphics Draw)で画像サイズ変更・圧縮【PHP】

概要

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

コメント

タイトルとURLをコピーしました