PHP で画像のサイズを変更する

Muhammad Abubakar 2023年1月30日
  1. サイズを変更する前に画像を読み込む
  2. PHP の imagecopyresized()
  3. PHP の imagecopyresampled()
  4. PHP の imagescale()
PHP で画像のサイズを変更する

このチュートリアル記事では、PHP での画像のサイズ変更について説明します。

サイズを変更する前に画像を読み込む

画像のサイズを変更する前に、まずスクリプト内の画像リソースとして画像を読み込む必要があります。file_get_contents() のような関数を使用して画像ファイルのコンテンツを取得することと同じではありません。ファイルをロードするには、imagecreatefromjpeg()imagecreatefrompng()imagecreatefromgif() などの関数を使用する必要があります。サイズを変更する画像の種類に応じて、それに応じて異なる関数を使用します。

PHP の getimagesize()

画像を読み込んだ後、getimagesize() を使用して、入力画像の幅、高さ、タイプを計算します。この関数はアイテムのリストを返します。画像の幅と高さはそれぞれインデックス 0 と 1 に格納され、IMAGETYPE_XXX 定数はインデックス 2 に格納されます。この返された定数の値を使用して、使用する画像の種類と使用する機能。

<?php
function load_image($filename, $type) {
    $new = 'new34.jpeg';
    if( $type == IMAGETYPE_JPEG ) {
        $image = imagecreatefromjpeg($filename);
        echo "here is jpeg output:";
        imagejpeg($image, $new);

    }
    elseif( $type == IMAGETYPE_PNG ) {
        $image = imagecreatefrompng($filename);
        echo "here is png output:";
        imagepng($image,$new);
    }
    elseif( $type == IMAGETYPE_GIF ) {
        $image = imagecreatefromgif($filename);
        echo "here is gif output:";
        imagejpeg($image, $new);
    }
    return $new;
}

$filename = "panda.jpeg";
list($width, $height,$type) = getimagesize($filename);
echo "Width:" , $width,"\n";
echo "Height:", $height,"\n";
echo "Type:", $type, "\n";

$old_image = load_image($filename, $type);
?>

Input_Image:

php サイズ変更画像-元の画像

出力:

Width:225
Height:225
Type:2
here is jpeg output:

Output_image:

php サイズ変更画像

このセクションでは、画像を読み込んで元の画像のサイズを計算するだけなので、どちらも同じ画像です。

PHP の imagecopyresized()

imagecopyresized() は、位置 (src_x,src_y)src_image から幅 src_w と高さ src_h の長方形の領域を取り、位置(dst_x、dst_y)の宛先画像の長方形領域の間に配置します。。これは PHP の組み込み関数です。

<?php
// File and new size
$filename = 'panda.jpeg';
$percent = 0.5;

// Content type
header('Content-Type: image/jpeg');

// Get new sizes
list($width, $height, $type) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;
$type = $list[2];
echo $type;
// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);

// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

// Output
imagejpeg($thumb,'new.jpeg');
?>

Input_Image:

php サイズ変更画像-元の画像

Output_image:

php サイズ変更画像

上で説明したように、imagecopyresize() 関数は、以下にリストされている 10 個のパラメーターを受け入れます。

パラメーター 説明
$dst_image 宛先画像リソース
$src_image ソース画像リソース
$dst_x 宛先ポイントの x 座標
$dst_y 目的地の y 座標
$src_x ソースポイントの x 座標
$src_y ソースポイントの y 座標
$dst_w 宛先幅
$dst_h 目的地の高さ
$src_w ソース幅
$src_h ソースの高さ

成功した場合はブール値 TRUE を返し、失敗した場合は FALSE を返します。

PHP の imagecopyresampled()

imagecopyresampled() は、ある画像の長方形の部分を別の画像にコピーし、ピクセル値をシームレスに補間して画像の寸法を縮小し、高レベルの鮮明度を維持します。

これは、imagecopyresized() 機能と同様に機能しますが、サイズ変更に加えて画像をサンプリングするという追加の利点があります。

<?php
// The file
$filename = 'panda.jpeg';
$percent = 2;

// Content type
header('Content-Type: image/jpeg');

// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;

// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Output
imagejpeg($image_p, 'resampled1.jpeg', 100);
?>

Input_Image:

php サイズ変更画像-元の画像

Output_image:

php サイズ変更画像

関数 imagecopyresampled() は、10 個の異なるパラメーターを受け入れます。

パラメーター 説明
$image_p 宛先イメージを決定します。
$image ソース画像を決定します。
$x_dest 宛先画像の x 座標を決定します。
$y_dest 宛先画像の y 座標を決定します。
$x_src ソース画像の x 座標を決定します。
$y_src ソース画像の y 座標を決定します。
$wid_dest 新しい画像の幅を決定します。
$hei_dest 新しい画像の高さを決定します。
$wid_src 古い画像の幅を決定します。
$wid_src 古い画像の高さを決定します。
比例的にリサンプリングを行うこともできます。これは、パーセントの代わりに dest_image の幅と高さを指定することで可能になります。

PHP の imagescale()

最新の画像の幅や高さを定義するのではなく、サイズを指定します。新しい画像サイズを最初の画像の半分にしたい場合は、サイズを 0.8 に設定します。これは、比率を維持しながら、特定の係数で画像を拡大縮小するサンプルコードです。

scale image() 関数内で、画像の元の幅と高さに指定されたスケールを掛けます。

ここにその例があります:

<?php
    
function load_image($filename, $type) {

        if( $type == IMAGETYPE_JPEG ) {
            $image = imagecreatefromjpeg($filename);

        }
        elseif( $type == IMAGETYPE_PNG ) {
            $image = imagecreatefrompng($filename);
           
        }
        elseif( $type == IMAGETYPE_GIF ) {
            $image = imagecreatefromgif($filename);
            
        }
        
        return $image;
    }
function scale_image($scale, $image, $width, $height) {
    $new_width = $width * $scale;
    $new_height = $height * $scale;
    return resize_image($new_width, $new_height, $image, $width, $height);
    
}
function resize_image($new_width, $new_height, $image, $width, $height) {
    $image12 = 'hello.jpeg';
    $new_imag = imagecreatetruecolor($new_width, $new_height);
    imagecopyresampled($new_imag, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    
    return imagejpeg($new_imag, $image12);
    }


$filename = "panda.jpeg";
list($width, $height, $type) = getimagesize($filename);
$old_image = load_image($filename, $type);
$image_scaled = scale_image(0.8, $old_image, $width, $height);
?>

Input_Image:

php サイズ変更画像-元の画像

Output_image:

php サイズ変更画像

それとは別に、PHP には、指定された幅と高さに画像を拡大縮小できる機能が組み込まれています。

サンプルコードを参照してください。

<?php
    
$out_image = "sca.jpeg";
$image_name ="panda.jpeg";
     
// Load image file
$image = imagecreatefromjpeg($image_name);
  
// Use imagescale() function to scale the image
$img = imagescale( $image, 500, 400 );
  

header("Content-type: image/jpeg");
imagejpeg($img,$out_image);
  
?>

Input_Image:

php サイズ変更画像-元の画像

Output_Image:

php サイズ変更画像

関連記事 - PHP Image