画像にフィルタを適用する

# imagefilter

(PHP 5, PHP 7)

imagefilter — 画像にフィルタを適用する

### 説明

imagefilter ( resource `$image` , int `$filtertype` [, int `$arg1` [, int `$arg2` [, int `$arg3` [, int `$arg4` ]]]] ) : bool

imagefilter() は、指定したフィルタ `filtertype` を `image` に適用します。

### パラメータ

`image`

  imagecreatetruecolor() のような画像作成関数が返す画像リソース。

`filtertype`

  `filtertype` は、以下のいずれかです。

  - `IMG_FILTER_NEGATE`: 画像の色を反転させます。
  - `IMG_FILTER_GRAYSCALE`: Converts the image into grayscale by changing the red, green and blue components to their weighted sum using the same coefficients as the REC.601 luma (Y') calculation. The alpha components are retained. For palette images the result may differ due to palette limitations.
  - `IMG_FILTER_BRIGHTNESS`: 画像の輝度を変更します。 輝度レベルを `arg1` で設定します。輝度の範囲は -255 から 255 までです。
  - `IMG_FILTER_CONTRAST`: 画像のコントラストを 変更します。コントラストのレベルを `arg1` で設定します。
  - `IMG_FILTER_COLORIZE`: `IMG_FILTER_GRAYSCALE` と似ていますが、 色を指定することが可能です。 `arg1`、`arg2` および `arg3` を使用して `red`、`green`、 `blue` の値を指定します。また `arg4` を使用して `alpha` チャネルの値を指定します。 各値の範囲は 0 から 255 までです。
  - `IMG_FILTER_EDGEDETECT`: エッジを検出し、 画像のエッジを強調します。
  - `IMG_FILTER_EMBOSS`: 画像にエンボス処理を行います。
  - `IMG_FILTER_GAUSSIAN_BLUR`: ガウス分布を 使用して画像をぼかします。
  - `IMG_FILTER_SELECTIVE_BLUR`: 画像をぼかします。
  - `IMG_FILTER_MEAN_REMOVAL`: 平均を除去し、 「スケッチ風の」効果を得ます。
  - `IMG_FILTER_SMOOTH`: 画像を滑らかにします。 滑らかさのレベルを `arg1` で指定します。
  - `IMG_FILTER_PIXELATE`: モザイク効果を画像に適用します。 `arg1` でブロックの大きさを、 そして `arg2` でモザイク効果のモードを指定します。
`arg1`

  - `IMG_FILTER_BRIGHTNESS`: 輝度レベル。
  - `IMG_FILTER_CONTRAST`: コントラストレベル。
  - `IMG_FILTER_COLORIZE`: 赤コンポーネントの値。
  - `IMG_FILTER_SMOOTH`: 平滑度レベル。
  - `IMG_FILTER_PIXELATE`: ピクセル単位のブロックサイズ。
`arg2`

  - `IMG_FILTER_COLORIZE`: 緑コンポーネントの値。
  - `IMG_FILTER_PIXELATE`: 高度なモザイク効果を使用するか否か (デフォルトは `FALSE`)。
`arg3`

  - `IMG_FILTER_COLORIZE`: 青コンポーネントの値。
`arg4`

  - `IMG_FILTER_COLORIZE`: アルファチャネル。 0 から 127 までの値で、0 は完全な不透明、127 は完全な透明を表す。

### 返り値

成功した場合に `TRUE` を、失敗した場合に `FALSE` を返します。

### 変更履歴

バージョン | 説明
--- | ---
5.2.5 | `IMG_FILTER_COLORIZE` でアルファチャネルをサポートするようになりました。

### 例

例1 imagefilter() グレースケールの例

`<?php
$im = imagecreatefrompng('dave.png');
if($im && imagefilter($im, IMG_FILTER_GRAYSCALE))
{
echo 'Image converted to grayscale.';
imagepng($im, 'dave.png');
}
else
{
echo 'Conversion to grayscale failed.';
}
imagedestroy($im);
?>`

例2 imagefilter() 輝度の例

`<?php
$im = imagecreatefrompng('sean.png');
if($im && imagefilter($im, IMG_FILTER_BRIGHTNESS, 20))
{
echo 'Image brightness changed.';
imagepng($im, 'sean.png');
imagedestroy($im);
}
else
{
echo 'Image brightness change failed.';
}
?>`

例3 imagefilter() 単色化の例

`<?php
$im = imagecreatefrompng('philip.png');
/* R, G, B, so 0, 255, 0 is green */
if($im && imagefilter($im, IMG_FILTER_COLORIZE, 0, 255, 0))
{
echo 'Image successfully shaded green.';
imagepng($im, 'philip.png');
imagedestroy($im);
}
else
{
echo 'Green shading failed.';
}
?>`

例4 imagefilter() での打ち消しの例

`<?php
// Define our negate function so its portable for
// php versions without imagefilter()
function negate($im)
{
if(function_exists('imagefilter'))
{
return imagefilter($im, IMG_FILTER_NEGATE);
}
for($x = 0; $x < imagesx($im); ++$x)
{
for($y = 0; $y < imagesy($im); ++$y)
{
$index = imagecolorat($im, $x, $y);
$rgb = imagecolorsforindex($index);
$color = imagecolorallocate($im, 255 - $rgb['red'], 255 - $rgb['green'], 255 - $rgb['blue']);
imagesetpixel($im, $x, $y, $color);
}
}
return(true);
}
$im = imagecreatefromjpeg('kalle.jpg');
if($im && negate($im))
{
echo 'Image successfully converted to negative colors.';
imagejpeg($im, 'kalle.jpg', 100);
imagedestroy($im);
}
else
{
echo 'Converting to negative colors failed.';
}
?>`

例5 imagefilter() でのモザイク処理の例

`<?php
// Load the PHP logo, we need to create two instances
// to show the differences
$logo1 = imagecreatefrompng('./php.png');
$logo2 = imagecreatefrompng('./php.png');
// Create the image instance we want to show the
// differences on
$output = imagecreatetruecolor(imagesx($logo1) * 2, imagesy($logo1));
// Apply pixelation to each instance, with a block
// size of 3
imagefilter($logo1, IMG_FILTER_PIXELATE, 3);
imagefilter($logo2, IMG_FILTER_PIXELATE, 3, true);
// Merge the differences onto the output image
imagecopy($output, $logo1, 0, 0, 0, 0, imagesx($logo1) - 1, imagesy($logo1) - 1);
imagecopy($output, $logo2, imagesx($logo2), 0, 0, 0, imagesx($logo2) - 1, imagesy($logo2) - 1);
imagedestroy($logo1);
imagedestroy($logo2);
// Output the differences
header('Content-Type: image/png');
imagepng($output);
imagedestroy($output);
?>`

上の例の出力は、 たとえば以下のようになります。

### 注意

### 参考

- imageconvolution() - div および offset の係数を使用し、3x3 の畳み込み配列を適用する