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

PHPのimageconvolution()関数で3×3畳み込み行列を画像に適用する方法

imageconvolution()は、PHPに組み込まれているGDライブラリの関数の一つで、画像に対して3×3の畳み込み行列(コンボリューション行列)を適用するために使用されます。この関数を活用することで、シャープ化やぼかし(ブラー)、エッジ検出など、さまざまな画像効果を実現できます。

構文

bool imageconvolution($image, $matrix, $div, $offset)

パラメータ

imageconvolution()関数は、以下の4つの引数を受け取ります。

  • $image − 処理対象となる画像リソースです。imagecreatetruecolor()などの画像生成関数、またはimagecreatefrompng()のような画像読み込み関数を使って作成します。

  • $matrix − 3×3の浮動小数点数(float)で構成される配列です。この行列の値によって、ピクセルごとの演算方法が決まります。

  • $div − 正規化のための除数です。通常は行列内の全要素の合計値を指定します。これにより画素値が範囲外になるのを防ぎます。

  • $offset − 色オフセットを設定するためのパラメータです。演算結果に加算され、出力画像の明るさなどを調整できます。

戻り値

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

使用例1:シャープ化フィルタの適用

<?php
   // imagecreatefrompng関数を使ってPNG画像を読み込む
   $image = imagecreatefrompng('C:\xampp\htdocs\Images\img59.png');
   
   // 3×3の配列マトリックスを定義
   $matrix = array(
      array(2, 0, 0),
      array(0, -1, 0),
      array(0, 0, -1)
   );
   // imageconvolution関数で画像に畳み込み処理を適用
   imageconvolution($image, $matrix, 1, 127);

   // 結果の画像をブラウザに出力
   header('Content-Type: image/png');
   imagepng($image, null, 9);
?>

出力結果

imageconvolution()関数を適用する前の入力PNG画像:

PHPのimageconvolution()関数で3×3畳み込み行列を画像に適用する方法

imageconvolution()関数を適用した後の出力PNG画像:

PHPのimageconvolution()関数で3×3畳み込み行列を画像に適用する方法

この例では、中心の係数を強調し周辺ピクセルを減算するマトリックスを使用することで、画像にシャープなコントラスト効果を与えています。

使用例2:ガウシアンブラー(ぼかし)の適用

<?php
   $image = imagecreatetruecolor(700, 300);
   
   // テキストを描画し、画像にガウシアンブラーを適用
   imagestring($image, 50, 25, 8, 'Gaussian Blur Text image', 0x00ff00);
   $gaussian = array(
      array(1.0, 2.0, 1.0),
      array(2.0, 4.0, 2.0),
      array(1.0, 2.0, 1.0)
   );
   imageconvolution($image, $gaussian, 16, 0);

   // 比較用にテキストを再描画
   imagestring($image, 15, 20, 18, 'Gaussian Blur Text image', 0x00ff00);
   header('Content-Type: image/png');
   imagepng($image, null, 9);
?>

出力結果

PHPのimageconvolution()関数で3×3畳み込み行列を画像に適用する方法

この例では、ガウシアン分布に基づいた3×3のマトリックスを適用しています。除数$divに16(行列要素の合計)を指定することで正規化を行い、自然なぼかし効果を実現しています。上段のぼかされたテキストと下段の鮮明なテキストを見比べることで、効果の違いがよく分かります。

まとめ

imageconvolution()関数を使えば、マトリックスの値を変えるだけで、シャープ化・ぼかし・エンボスなど多彩な画像エフェクトを簡単に実装できます。GDライブラリが有効になっている環境であれば、追加のライブラリなしで利用可能なので、PHPでの画像処理において非常に便利な関数です。

  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のimagecreatefromwbmp()関数でWBMPファイルやURLから新しい画像を作成する方法

    PHPには、WBMPファイルまたはURLから新しい画像を作成するための組み込み関数 imagecreatefromwbmp() が用意されています。この関数は、指定されたファイル名から取得した画像を表す画像リソース識別子を返します。WBMPファイルから画像を読み込んだ後に編集したい場合などに活用できる便利な関数です。また、imagewbmp() 関数を使えば、画像をWBMP形式へ変換して保存することも可能です。 構文 resource imagecreatefromwbmp(string $filename) パラメータ imagecreatefromwbmp() が受け取るパラメータは $f