imagefilter

(PHP 5, PHP 7, PHP 8)

imagefilter对图像使用过滤器

说明

imagefilter(GdImage $image, int $filter, array|int|float|bool ...$args): bool

imagefilter()image 上应用指定的过滤器 filter

参数

image

由图象创建函数(例如imagecreatetruecolor())返回的 GdImage 对象。

filter

filter 可以是下列中的一个:

args

arg2

arg3

arg4

  • IMG_FILTER_COLORIZE:Alpha 通道,A 值在 0 到 127 之间。 0 表示完全不透明,而 127 表示完全透明。

返回值

成功时返回 true, 或者在失败时返回 false

错误/异常

抛出 ValueError 异常,如果 subplus 会导致 IMG_FILTER_SCATTER filter 的溢出/下溢。

更新日志

版本 说明
8.4.0 现在抛出 ValueError 异常,如果 subplus 会导致 IMG_FILTER_SCATTER filter 的溢出/下溢。
8.0.0 image 现在需要 GdImage 实例;之前需要有效的 gd resource
7.4.0 新增散射支持(IMG_FILTER_SCATTER)。

示例

示例 #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.';
}
?>

示例 #2 imagefilter() 亮度示例

<?php
$im
= imagecreatefrompng('sean.png');

if(
$im && imagefilter($im, IMG_FILTER_BRIGHTNESS, 20))
{
echo
'Image brightness changed.';

imagepng($im, 'sean.png');
}
else
{
echo
'Image brightness change failed.';
}
?>

示例 #3 imagefilter() 着色示例

<?php
$im
= imagecreatefrompng('philip.png');

/* R、G、B, 所以 0, 255, 0 是绿色 */
if($im && imagefilter($im, IMG_FILTER_COLORIZE, 0, 255, 0))
{
echo
'Image successfully shaded green.';

imagepng($im, 'philip.png');
}
else
{
echo
'Green shading failed.';
}
?>

示例 #4 imagefilter() 反例

<?php
// 定义否定函数,以便可以移植到没有
// imagefilter() 的 php 版本
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);
}
else
{
echo
'Converting to negative colors failed.';
}
?>

示例 #5 imagefilter() 像素化示例

<?php
// 加载 PHP log,需要创建两个实例
// 来显示差异
$logo1 = imagecreatefrompng('./php.png');
$logo2 = imagecreatefrompng('./php.png');

// 创建想要显示差异的图像实例
$output = imagecreatetruecolor(imagesx($logo1) * 2, imagesy($logo1));

// 对每个实例应用像素化,块大小为 3
imagefilter($logo1, IMG_FILTER_PIXELATE, 3);
imagefilter($logo2, IMG_FILTER_PIXELATE, 3, true);

// 合并差异到输出图像上
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);

// 输出差异
header('Content-Type: image/png');
imagepng($output);
?>

以上示例的输出类似于:

示例输出:imagefilter() 像素化

示例 #6 imagefilter() 散射示例

<?php
// 加载图像
$logo = imagecreatefrompng('./php.png');

// 对图像应用非常柔和的散射效果
imagefilter($logo, IMG_FILTER_SCATTER, 3, 5);

// 输出带有散射效果的图像
header('Content-Type: image/png');
imagepng($logo);
?>

以上示例的输出类似于:

输出示例:imagefilter() 散射

注释

注意: IMG_FILTER_SCATTER 的结果始终随机。

参见