在一个小项目里需要用到php的图像处理功能,才发现php通过imagefilter能够实现强大的功能。
imagefilter
(PHP 5)
imagefilter — Applies a filter to an image
Description
$image
, int $filtertype
[, int $arg1
[, int $arg2
[, int $arg3
[, int $arg4
]]]] )imagefilter() applies the given filter filtertype
on the image
.
Parameters
image
- An image resource, returned by one of the image creation functions, such as imagecreatetruecolor().
filtertype
filtertype
can be one of the following:IMG_FILTER_NEGATE
: Reverses all colors of the image.IMG_FILTER_GRAYSCALE
: Converts the image into grayscale.IMG_FILTER_BRIGHTNESS
: Changes the brightness of the image. Usearg1
to set the level of brightness.IMG_FILTER_CONTRAST
: Changes the contrast of the image. Usearg1
to set the level of contrast.IMG_FILTER_COLORIZE
: LikeIMG_FILTER_GRAYSCALE
, except you can specify the color. Usearg1
,arg2
andarg3
in the form ofred
,green
,blue
andarg4
for thealpha
channel. The range for each color is 0 to 255.IMG_FILTER_EDGEDETECT
: Uses edge detection to highlight the edges in the image.IMG_FILTER_EMBOSS
: Embosses the image.IMG_FILTER_GAUSSIAN_BLUR
: Blurs the image using the Gaussian method.IMG_FILTER_SELECTIVE_BLUR
: Blurs the image.IMG_FILTER_MEAN_REMOVAL
: Uses mean removal to achieve a “sketchy” effect.IMG_FILTER_SMOOTH
: Makes the image smoother. Usearg1
to set the level of smoothness.IMG_FILTER_PIXELATE
: Applies pixelation effect to the image, usearg1
to set the block size andarg2
to set the pixelation effect mode.
arg1
-
IMG_FILTER_BRIGHTNESS
: Brightness level.IMG_FILTER_CONTRAST
: Contrast level.IMG_FILTER_COLORIZE
: Value of red component.IMG_FILTER_SMOOTH
: Smoothness level.IMG_FILTER_PIXELATE
: Block size in pixels.
arg2
-
IMG_FILTER_COLORIZE
: Value of green component.IMG_FILTER_PIXELATE
: Whether to use advanced pixelation effect or not (defaults toFALSE
).
arg3
-
IMG_FILTER_COLORIZE
: Value of blue component.
arg4
-
IMG_FILTER_COLORIZE
: Alpha channel, A value between 0 and 127. 0 indicates completely opaque while 127 indicates completely transparent.
Return Values
Returns TRUE
on success or FALSE
on failure.
我用到的几个功能
imagefilter($dst_r, IMG_FILTER_BRIGHTNESS, -80);
The documentation misses the exact meaning and valid ranges of the arguments for ImageFilter(). According to the 5.2.0 sources the arguments are:
IMG_FILTER_BRIGHTNESS
-255 = min brightness, 0 = no change, +255 = max brightness
IMG_FILTER_CONTRAST
-100 = max contrast, 0 = no change, +100 = min contrast (note the direction!)
IMG_FILTER_COLORIZE
Adds (subtracts) specified RGB values to each pixel. The valid range for each color is -255…+255, not 0…255. The correct order is red, green, blue.
-255 = min, 0 = no change, +255 = max
This has not much to do with IMG_FILTER_GRAYSCALE.
IMG_FILTER_SMOOTH
Applies a 9-cell convolution matrix where center pixel has the weight arg1 and others weight of 1.0. The result is normalized by dividing the sum with arg1 + 8.0 (sum of the matrix).
any float is accepted, large value (in practice: 2048 or more) = no change
ImageFilter seem to return false if the argument(s) are out of range for the chosen filter.
You must add imagesavealpha($im, true);
so the alpha channel will be saved on the new image.
$im = imagecreatefrompng('image.png');
imagealphablending($im, false);
imagesavealpha($im, true);
if($im && imagefilter($im, IMG_FILTER_COLORIZE, 0,0,255,0)) {
imagepng($im, 'image-new.png');
imagedestroy($im);
}