PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのimagedestroy()関数で画像を破棄してメモリを解放する方法

imagedestroy()は、PHPに標準で組み込まれている関数の一つで、画像を破棄し、その画像に関連付けられたメモリを解放(デアロケート)するために使用されます。画像を大量に処理するスクリプトでは、不要になった画像を適切に破棄することでメモリの無駄遣いを防ぎ、パフォーマンスを維持できます。

構文

bool imagedestroy(resource $image)

パラメータ

imagedestroy()が受け取るパラメータは$imageの1つだけです。このパラメータには、破棄対象となる画像リソースを指定します。

戻り値

imagedestroy()は、処理が成功した場合にtrueを、失敗した場合にfalseを返します。

例1:画像を読み込んだ後に破棄する

<?php
   // ローカルドライブのフォルダからPNG画像を読み込む
   $img = imagecreatefrompng('C:\xampp\htdocs\Images\img32.png');

   // 画像を切り抜く
   $cropped = imagecropauto($img, IMG_CROP_BLACK);

   // PNGファイルとして出力する
   imagepng($cropped);

   // 切り抜いた画像を破棄してメモリを解放する
   imagedestroy($cropped);
?>

出力

注意 − imagedestroy()関数を使用することで、$cropped変数が破棄されるため、以後この変数にアクセスすることはできません。

解説 − 例1では、まずimagecreatefrompng()関数を使ってローカルドライブから画像を読み込み、続いてimagecropauto()関数で画像の一部を切り抜いています。切り抜き処理が完了した後、imagedestroy()関数を呼び出して画像を破棄します。一度破棄された画像は、$cropped変数を通じてアクセスすることも再利用することもできません。

例2:作成した画像を破棄する

<?php
   // 50×50の画像を作成する
   $img = imagecreatetruecolor(50, 50);
   
   // 画像をメモリから解放する
   imagedestroy($img);
?>

注意 − 上記のPHPコードでは、imagecreatetruecolor()関数を使用して50×50ピクセルの画像を作成しています。画像の作成後、imagedestroy()関数を呼び出すことで、その画像が使用していたメモリを解放しています。

補足:PHP 8.0以降での扱いについて

PHP 8.0以降では、画像は従来のリソース型ではなくGdImageオブジェクトとして扱われます。ただし、imagedestroy()関数の使い方や挙動は従来と変わらないため、既存のコードもそのまま動作します。


  1. PHPのimagecropauto()関数で画像を自動的に切り抜く方法を徹底解説

    imagecropauto()は、PHPに標準で組み込まれている関数の一つで、用意された複数のモードの中から選択して、画像を自動的に切り抜き(クロップ)することができます。構文resource imagecropauto(resource $image, int $mode, float $threshold, int $color)パラメータimagecropauto()は、$image、$mode、$threshold、$color の4つのパラメータを受け取ります。$image − 切り抜き対象となる画像リソースを指定します。$mode − 省略可能なパラメータで、切り抜きモードに対応す

  2. PHPのimageflip()関数の使い方とサンプルコード

    imageflip()関数は、指定されたモードに従って画像を反転させるために使用されるPHPの組み込み関数です。水平方向、垂直方向、あるいはその両方への反転が可能で、画像処理を行う際に非常に便利な機能です。 構文 bool imageflip(img, mode) パラメータ img: imagecreatetruecolor()などの画像作成関数によって生成された画像リソースを指定します。 mode: 反転のモードを指定します。指定できる値は以下の3種類です。 modeに指定できる値 IMG_FLIP_HORIZONTAL:画像を水平方向(左右)に反転します。 IMG_FLIP_VER