This will only work if you have php5. For php4, you'll have to use the sepia function set webmaster at qudi dot de suggested.
imagefilter
(PHP 5)
imagefilter — Applies a filter to an image
Beschreibung
$image
, int $filtertype
[, int $arg1
[, int $arg2
[, int $arg3
[, int $arg4
]]]] )
imagefilter() applies the given filter
filtertype on the image.
Parameter-Liste
-
image -
Eine von den verschiedenen Erzeugungsfunktionen wie imagecreatetruecolor() gelieferte Grafikressource.
-
filtertype -
filtertypecan 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,blue,greenandarg4for 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: Wert der Rotkomponente. -
IMG_FILTER_SMOOTH: Smoothness level. -
IMG_FILTER_PIXELATE: Block size in pixels.
-
-
arg2 -
-
IMG_FILTER_COLORIZE: Wert der Grünkomponente. -
IMG_FILTER_PIXELATE: Whether to use advanced pixelation effect or not (defaults toFALSE).
-
-
arg3 -
-
IMG_FILTER_COLORIZE: Wert der Blaukomponente.
-
-
arg4 -
-
IMG_FILTER_COLORIZE: Alpha channel, A value between 0 and 127. 0 indicates completely opaque while 127 indicates completely transparent.
-
Rückgabewerte
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Changelog
| Version | Beschreibung |
|---|---|
| 5.3.0 |
Pixelation support (IMG_FILTER_PIXELATE) was added.
|
| 5.2.5 |
Alpha support for IMG_FILTER_COLORIZE was added.
|
Beispiele
Beispiel #1 imagefilter() grayscale example
<?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);
?>
Beispiel #2 imagefilter() brightness example
<?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.';
}
?>
Beispiel #3 imagefilter() colorize example
<?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.';
}
?>
Beispiel #4 imagefilter() negate example
<?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.';
}
?>
Beispiel #5 imagefilter() pixelate example
<?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);
?>
Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:
Anmerkungen
Hinweis: Diese Funktion steht nur zur Verfügung, wenn PHP mit der GD Bibliothek übersetzt wurde, die mit PHP zusammen erhältlich ist.
imagefilter
08-May-2007 09:56
16-Mar-2007 06:26
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.
<?php
(...)
imagefilter($yourimage, IMG_FILTER_GRAYSCALE); imagefilter($yourimage, IMG_FILTER_COLORIZE, 90, 60, 40);
(...)
?>
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.
14-Feb-2007 09:31
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.
14-Jan-2007 03:55
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.
03-Aug-2006 11:16
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.
27-Feb-2006 08:37
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.
<?php
function colorize($img_src,$img_dest, $r, $g, $b)
{
if(!$im = imagecreatefromgif($img_src))
return "Could not use image $img_src";
//We will create a monochromatic palette based on
//the input color
//which will go from black to white
//Input color luminosity: this is equivalent to the
//position of the input color in the monochromatic
//palette
$lum_inp=round(255*($r+$g+$b)/765); //765=255*3
//We fill the palette entry with the input color at its
//corresponding position
$pal[$lum_inp]['r']=$r;
$pal[$lum_inp]['g']=$g;
$pal[$lum_inp]['b']=$b;
//Now we complete the palette, first we'll do it to
//the black,and then to the white.
//FROM input to black
//===================
//how many colors between black and input
$steps_to_black=$lum_inp;
//The step size for each component
if($steps_to_black)
{
$step_size_red=$r/$steps_to_black;
$step_size_green=$g/$steps_to_black;
$step_size_blue=$b/$steps_to_black;
}
for($i=$steps_to_black;$i>=0;$i--)
{
$pal[$steps_to_black-$i]['r']=$r-round($step_size_red*$i);
$pal[$steps_to_black-$i]['g']=$g-round($step_size_green*$i);
$pal[$steps_to_black-$i]['b']=$b-round($step_size_blue*$i);
}
//From input to white:
//===================
//how many colors between input and white
$steps_to_white=255-$lum_inp;
if($steps_to_white)
{
$step_size_red=(255-$r)/$steps_to_white;
$step_size_green=(255-$g)/$steps_to_white;
$step_size_blue=(255-$b)/$steps_to_white;
}
else
$step_size_red=$step_size_green=$step_size_blue=0;
//The step size for each component
for($i=($lum_inp+1);$i<=255;$i++)
{
$pal[$i]['r']=$r + round($step_size_red*($i-$lum_inp));
$pal[$i]['g']=$g + round($step_size_green*($i-$lum_inp));
$pal[$i]['b']=$b + round($step_size_blue*($i-$lum_inp));
}
//--- End of palette creation
//Now,let's change the original palette into the one we
//created
for($c = 0; $c < $palette_size; $c++)
{
$col = imagecolorsforindex($im, $c);
$lum_src=round(255*($col['red']+$col['green']
+$col['blue'])/765);
$col_out=$pal[$lum_src];
imagecolorset($im, $c, $col_out['r'],
$col_out['g'],
$col_out['b']);
}
//save the image file
imagepng($im,$img_dest);
imagedestroy($im);
}//end function colorize
?>
31-Jan-2006 03:53
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);
}
20-Dec-2005 09:48
http://www.hudzilla.org/phpbook/read.php/11_2_15
for more detailed info, and some <i>arg</i> guidelines.
04-Sep-2004 10:36
Examples using 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);
?>
/////////////////////////////
<?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.';
}
imagedestroy($im);
?>
/////////////////////////////
<?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');
} else {
echo 'Green shading failed.';
}
imagedestroy($im);
?>
21-Jul-2004 03:26
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.