Hướng dẫn php imagefilter

[PHP 5, PHP 7, PHP 8]

imagefilterApplies a filter to an image

Description

imagefilter[GdImage $image, int $filter, array|int|float|bool ...$args]: bool

Parameters

image

A GdImage object, returned by one of the image creation functions, such as imagecreatetruecolor[].

filter

filter can be one of the following:

  • IMG_FILTER_NEGATE: Reverses all colors of the image.
  • 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: Changes the brightness of the image. Use args to set the level of brightness. The range for the brightness is -255 to 255.
  • IMG_FILTER_CONTRAST: Changes the contrast of the image. Use args to set the level of contrast.
  • IMG_FILTER_COLORIZE: Like IMG_FILTER_GRAYSCALE, except you can specify the color. Use args, arg2 and arg3 in the form of red, green, blue and arg4 for the alpha 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. Use args to set the level of smoothness.
  • IMG_FILTER_PIXELATE: Applies pixelation effect to the image, use args to set the block size and arg2 to set the pixelation effect mode.
  • IMG_FILTER_SCATTER: Applies scatter effect to the image, use args and arg2 to define the effect strength and additionally arg3 to only apply the on select pixel colors.
args
  • 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.
  • IMG_FILTER_SCATTER: Effect substraction level. This must not be higher or equal to the addition level set with arg2.
arg2
  • IMG_FILTER_COLORIZE: Value of green component.
  • IMG_FILTER_PIXELATE: Whether to use advanced pixelation effect or not [defaults to false].
  • IMG_FILTER_SCATTER: Effect addition level.
arg3
  • IMG_FILTER_COLORIZE: Value of blue component.
  • IMG_FILTER_SCATTER: Optional array indexed color values to apply effect at.
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.

Changelog

VersionDescription
8.0.0 image expects a GdImage instance now; previously, a resource was expected.
7.4.0 Scatter support [IMG_FILTER_SCATTER] was added.

Examples

Example #1 imagefilter[] grayscale example

Example #2 imagefilter[] brightness example

Example #3 imagefilter[] colorize example

Example #4 imagefilter[] negate example

Example #5 imagefilter[] pixelate example

The above example will output something similar to:

Example #6 imagefilter[] scatter example

The above example will output something similar to:

Notes

Note: The result of IMG_FILTER_SCATTER is always random.

See Also

  • imageconvolution[] - Apply a 3x3 convolution matrix, using coefficient and offset

PanuWorld

15 years ago

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.

martijn at martijnfrazer dot nl

8 years ago

I needed an especially strong blur effect today and had a hard time achieving adequate results with the built-in IMG_FILTER_GAUSSIAN_BLUR filter. In order to achieve the strength of the blur I required I had to repeat the filter up to  100 times, which took way too long to be acceptable.

After a bit of searching, I found this answer to be quite a good solution to this problem: //stackoverflow.com/a/20264482

Based on that technique, I wrote the following generic function to achieve a very strong blur in a reasonable amount of processing:

yoann at yoone dot eu

9 years ago

Here is an alternative to IMG_FILTER_COLORIZE filter, but taking the alpha parameter of each pixel in account.

aiden dot mail at freemail dot hu

14 years ago

Function to change the transparency of a png image on the fly. Works only with PNG, and with a browser supporting alpha channel.
The function stretches the opacity-range of the image, so that the most opaque pixel[s] will be set to the given opacity. [Other opacity values in pixels are modified accordingly.]
Returns success or failure.



Example for use:

cookie at backbone dot sk

10 years ago

a function to create nice vignette effect:

kees at tweakers dot net

18 years ago

From what i have been able to find from this function, it accepts the following arguments:
        IMG_FILTER_NEGATE
        IMG_FILTER_GRAYSCALE
        IMG_FILTER_EDGEDETECT
        IMG_FILTER_GAUSSIAN_BLUR
        IMG_FILTER_SELECTIVE_BLUR
        IMG_FILTER_EMBOSS
        IMG_FILTER_MEAN_REMOVAL

The following arguments need one or more arguments.
        IMG_FILTER_SMOOTH, -1924.124
        IMG_FILTER_COLORIZE, -127.12, -127.98, 127
        IMG_FILTER_CONTRAST, -90
        IMG_FILTER_BRIGHTNESS, 98

        I haven't tested them all, the names speak for themselves.

hadrien dot jouet at grownseed dot net

11 years ago

For people looking to apply a 'multiply' effect on images like the one in Photoshop [generally b&w ones], you can achieve it with the IMG_FILTER_COLORIZE filter.

bushmakin stas [bushstas at mail dot ru]

11 years ago

a function to make all colors gray except the only one
i made it myself so the code is note so beautiful ]

shahilahmed4242 at gmail dot com

6 years ago

PHP Sepia Effect

  $myImage = imagecreatefromjpeg[$f];
  imagefilter[$myImage,IMG_FILTER_GRAYSCALE];
  imagefilter[$myImage,IMG_FILTER_BRIGHTNESS,-30];
  imagefilter[$myImage,IMG_FILTER_COLORIZE, 90, 55, 30]; 
  header["Content-type: image/jpeg"];
  imagejpeg[$myImage ];
  imagejpeg[$myImage,$f];
  imagedestroy[ $myImage ];

Manolo at msalsas dot com

8 years ago

filtertype is an integer. So if you want to use it as a variable and need to use, e.g. preg_match function you can do it in this way:



The order of the filtertypes in this manual determines the number of each filter, from 0 to 11. E.g. IMG_FILTER_NEGATE=0.

martijn[97+1] at gmail dot com [solve math]

9 years ago

Simple pixelate function, just in case you are < 5.3

fananf at nerdshack dot com

15 years ago

If you're looking for fast sepia effect that can be used for on-the-fly thumbnails generation you can't use sophisticated functions. The faster and much better way than described by webmaster at qudi dot de in the note from 31-Jan-2006 is applying colorize filter AFTER grayscale.



I used [90,60,40] for my sepia after couple of tests, however, if you need darker or lighter just check what suits you best.

vdepizzol at hotmail dot com

18 years ago

Examples using imagefilter[]:



/////////////////////////////



/////////////////////////////

michaeln no at spam associationsplus ca

14 years ago

Note: applying IMG_FILTER_EMBOSS to text and using in a customization to the CAPTCHA image script in phpBB or a project of your own is a very good way to stop OCR-ing bots from getting through. Embossed serif fonts are fairly easy for the human eye to understand but to an OCR script it is extremely difficult because it seems to give it the illusion of 3D.

If you only allocate 2 or 3 colours in the image, it uses the background colour alot in the embossed text, which greatly contributes to this.

I made my own custom CAPTCHA script to stop phpBB post spam for a client site I was developing and I have gone from getting 2-3 new spam users created every day to zero.

Anything with the source code freely available out there right now is possible to be defeated by spammers once one of them stars sharing code with the other spammers, but if you run something at least someone custom, their bots will pass you over.

nancy at hypertextdigital dot com

16 years ago

This routine was just what I was looking for, I wanted web admin users to be able to recolour their uploaded photos [to go with a news item] either a blue tint or sepia to match the appearance of other colours used on the website.

Using a form with a select box containing the RGB values, I can give them the option of either of the two tints or no colourization at all, plus resize their images to the viewing size and a thumbnail image on the fly without having to use any other image editing software.

webmaster at qudi dot de

16 years ago

for a quick, ok-looking, sepia-effect [also in php4] I just use this little fellow, since a real implementation of sepia was just way too slow.

function pseudosepia[&$im,$percent]{
      $sx=imagesx[$im];
      $sy=imagesy[$im];
      $filter=imagecreatetruecolor[$sx,$sy];
      $c=imagecolorallocate[$filter,100,50,50];
      imagefilledrectangle[$filter,0,0,$sx,$sy,$c];
      imagecopymerge[$im,$filter,0,0,0,0,$sx,$sy,$percent];
}

mail at kavisiegel dot com

13 years ago

Searching for a way to easily change the color of the image, I tried IMG_FILTER_COLORIZE. I was unable to get the quality results I wanted. It turns out PHP's Colorize is the equivalent of Photoshop's "Linear Dodge" layer filter.

Hue adjustments have always worked well for me, so I figured I could try with PHP.
This function is kind of slow on larger images, but on small images like what I'm using it for, the difference is trivial.

The script calculates the ratio or red, to green, to blue in the color provided, then scales the image appropriately... unfortunately, it does it pixel by pixel.

Here's a demo and comparison of this function, to photoshop's hue function, to PHP's colorize. //img146.imageshack.us/img146/3167/imagefilterhuedemo.png

Padde

9 years ago

I played with IMG_FILTER_SMOOTH and tried some negative
values.

-1 to -7: looks like a mix of smoothness and edgedetect

-8: image seems to be completely broken

-9 and lower: kind of sharpening effect [-9 sharper than -10]

I think the sharpening effect in particular could be useful.

jonathan dot gotti at gmail dot com

11 years ago

IMG_FILTER_COLORIZE doesn't seem to work on palette image, here's a way to achieve same result with palette image:



Here's also a function that work on both truecolor and palette images that try to do something similar to greyscale with a given color


with hope that someone will find this useful

santibari at fibertel dot com

16 years ago

A colorize algorithm wich preserves color luminosity [i.e black
will output black, and white will output white].
This works in PHP4 and is great for customizing interfaces
dinamically.

mail at pedrocandeias dot com

10 years ago

// With transparent PNG file you can colorize the "positive" items and stand the transparent has it is - Beta code

trucex email over at gmail

15 years ago

It appears that imagefilter doesn't play nice with apha. If you run an imagefilter on a transparent image it'll return a black image...similar to a lot of Photoshop plugins do.

Chủ Đề