PHP

効率的に画像をリサイズ・圧縮!PHPのconvert -resizeの活用テクニック

画像のサイズや容量を変更するニーズはウェブサイトを運営している人々の間で常に存在します。特にウェブページの読み込み速度を上げるために、画像の容量を削減することは非常に重要です。
この記事では、PHPのconvert -resizeコマンドを使って、画像を簡単にリサイズ・圧縮する方法を紹介します。

画像を呼び出すHTMLの記述

画像をウェブページに表示するには、以下のようにHTMLを記述します。
resize.phpは、画像をリサイズする役割を持つPHPファイルです。

<img src="resize.php?imgp=画像ファイルパス+ファイル名" alt="呼び出し元画像">

 
ここで、パラメータimgpには、リサイズしたい画像のファイルパスとファイル名を指定します。

PHPのconvert -resizeを使って画像のリサイズ(resize.php)

次に、実際のリサイズ処理を行うresize.phpファイルのコードの詳細を見ていきましょう。
※以下の[0][1]のカッコ[]は全角になってるので記述する場合は半角のカッコにする必要があります。

<?php 
if (!empty($_GET['imgp'])) {
    $image_file = $_GET['imgp'];
}
 
$img = new mimage($image_file); 
 
$newWidth = 100; //画像のリサイズ幅(px)を指定
$newHeight = ($img->height / ($img->width / $newWidth));
 
header('Content-type: image/jpeg'); 
echo $img->resizeimage($newWidth, $newHeight); 
 
 
class mimage { 
    var $img_path; 
    var $width; 
    var $height; 
    var $font_file_path; 
   
    function mimage($image_path) { 
        $this->img_path = $image_path; 
        $image_info = getimagesize($this->img_path); 
        $this->width = $image_info[0]; 
        $this->height = $image_info[1]; 
    } 
   
    function resizeimage($max_w, $max_h, $new_file_dir = null, $new_file_name = null) { 
        if ($new_file_name) { 
            $new_file_path = $new_file_dir .'/'. $new_file_name; 
            $cmd = "convert ". $this->img_path ." -resize {$max_w}x{$max_h} {$new_file_path} "; 
            system($cmd); 
        } else { 
            $cmd = "convert ". $this->img_path ." -resize {$max_w}x{$max_h} -"; 
            return shell_exec($cmd); 
        } 
    } 
  
}
?>

 
このコードは、指定された画像ファイルを取得し、新しい幅と高さにリサイズします。
リサイズの処理は、convert -resizeコマンドを用いて実行されます。

注意点

上記の方法は、画像をリアルタイムでリサイズすることができるため非常に便利ですが、画像の質の劣化が懸念される場合があります。特に、何度もリサイズを繰り返すと、画像のクオリティが低下する可能性があります。

そのため、品質を維持したまま画像をウェブサイトに表示したい場合は、PhotoshopやGIMPなどの専用ソフトウェアを使って、あらかじめ適切なサイズや容量に編集してからアップロードすることをおすすめします。

まとめ

PHPのconvert -resizeを活用すれば、簡単にウェブページ上で画像のリサイズや圧縮が行えます。しかし、画像の品質を最優先する場合は、専用の画像編集ソフトウェアを使用することを検討してください。

 
※流用される場合は自己責任でお願いします。