|
imagetruecolortopalette
Convert a true color image to a palette image
(PHP 4 >= 4.0.6, PHP 5)
Code Examples / Notes » imagetruecolortopalettedarkelder
TrueColor images should be converted to Palette images with this function. So, if you want to use imagecolorstotal() function [ http://php.net/manual/en/function.imagecolorstotal.php ] , you should first convert the image to a palette image with imagetruecolortopalette();
php
The palette created by this function often looks quite awful (at least it did on all of my test images). A better way to convert your true-colour images is by first making a resized copy of them with imagecopyresampled() to a 16x16 pixel destination. The resized image then contains only 256 pixels, which is exactly the number of colours you need. These colours usually look a lot better than the ones generated by imagetruecolortopalette(). The only disadvantage to this method I have found is that different-coloured details in the original image are lost in the conversion. zmorris
Sometimes this function gives ugly/dull colors (especially when ncolors < 256). Here is a replacement that uses a temporary image and ImageColorMatch() to match the colors more accurately. It might be a hair slower, but the file size ends up the same: <?php function ImageTrueColorToPalette2( $image, $dither, $ncolors ) { $width = imagesx( $image ); $height = imagesy( $image ); $colors_handle = ImageCreateTrueColor( $width, $height ); ImageCopyMerge( $colors_handle, $image, 0, 0, 0, 0, $width, $height, 100 ); ImageTrueColorToPalette( $image, $dither, $ncolors ); ImageColorMatch( $colors_handle, $image ); ImageDestroy( $colors_handle ); } ?> jemore
If you open a truecolor image (with imageCreateFromPng for example), and you save it directly to GIF format with imagegif, you can have a 500 internal server error. You must use imageTrueColorToPalette to reduce to 256 colors before saving the image in GIF format.
burninleo
If You know which palette to use (e.g. 255 colors greyscale) You may achieve better results using the following way: 1. Create new image 2. Apply palette 3. imagecopy() the content This is especially helpful if you created a greyscale picture in trucolor-mode (to use antialiasing for example) but need to send it as palette (to use transparency in Internet Explorer). The following example will *not* create great results from "real" truecolor images but works well on grey truecolor images: <?PHP function imageTruecolorToGrayscale(&$image) { $copy = $image; $dx = imagesx($image); $dy = imagesy($image); $image = imagecreate($dx, $dy); // 254 Colors + 1 reserved for transparency $transparency = imagecolorallocate($image, 0, 255, 0); $max = 255; $dd = 254; for ($i=0; $i<$dd; $i++) { $val = round($max * $i / ($dd-1)); imagecolorallocate($image, $val, $val, $val); } imagecopy($image, $copy, 0, 0, 0, 0, $dx, $dy); imagedestroy($copy); return $transparency; } ?> will
a basic palette to true color function <?php function imagepalettetotruecolor(&$img) { if (!imageistruecolor($img)) { $w = imagesx($img); $h = imagesy($img); $img1 = imagecreatetruecolor($w,$h); imagecopy($img1,$img,0,0,0,0,$w,$h); $img = $img1; } } ?> |
Change Languagegd_info getimagesize image_type_to_extension image_type_to_mime_type image2wbmp imagealphablending imageantialias imagearc imagechar imagecharup imagecolorallocate imagecolorallocatealpha imagecolorat imagecolorclosest imagecolorclosestalpha imagecolorclosesthwb imagecolordeallocate imagecolorexact imagecolorexactalpha imagecolormatch imagecolorresolve imagecolorresolvealpha imagecolorset imagecolorsforindex imagecolorstotal imagecolortransparent imageconvolution imagecopy imagecopymerge imagecopymergegray imagecopyresampled imagecopyresized imagecreate imagecreatefromgd2 imagecreatefromgd2part imagecreatefromgd imagecreatefromgif imagecreatefromjpeg imagecreatefrompng imagecreatefromstring imagecreatefromwbmp imagecreatefromxbm imagecreatefromxpm imagecreatetruecolor imagedashedline imagedestroy imageellipse imagefill imagefilledarc imagefilledellipse imagefilledpolygon imagefilledrectangle imagefilltoborder imagefilter imagefontheight imagefontwidth imageftbbox imagefttext imagegammacorrect imagegd2 imagegd imagegif imagegrabscreen imagegrabwindow imageinterlace imageistruecolor imagejpeg imagelayereffect imageline imageloadfont imagepalettecopy imagepng imagepolygon imagepsbbox imagepsencodefont imagepsextendfont imagepsfreefont imagepsloadfont imagepsslantfont imagepstext imagerectangle imagerotate imagesavealpha imagesetbrush imagesetpixel imagesetstyle imagesetthickness imagesettile imagestring imagestringup imagesx imagesy imagetruecolortopalette imagettfbbox imagettftext imagetypes imagewbmp imagexbm iptcembed iptcparse jpeg2wbmp png2wbmp |