PHP的图片处理功能
在一个小项目里需要用到php的图像处理功能,才发现php通过imagefilter能够实现强大的功能。
imagefilter
(PHP 5)
imagefilter — Applies a filter to an image
Description
bool imagefilter ( resource $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. Usearg1to set the level of brightness.IMG_FILTER_CONTRAST: Changes the contrast of the image. Usearg1to set the level of contrast.IMG_FILTER_COLORIZE: LikeIMG_FILTER_GRAYSCALE, except you can specify the color. Usearg1,arg2andarg3in the form ofred,green,blueandarg4for thealphachannel. 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. Usearg1to set the level of smoothness.IMG_FILTER_PIXELATE: Applies pixelation effect to the image, usearg1to set the block size andarg2to 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);
}