|
 |
imagetruecolortopalette (PHP 4 >= 4.0.6, PHP 5) imagetruecolortopalette -- Convert a true color image to a palette image Descriptionbool imagetruecolortopalette ( resource image, bool dither, int ncolors )
imagetruecolortopalette() converts a truecolor image
to a palette image. The code for this function was originally drawn from
the Independent JPEG Group library code, which is excellent. The code
has been modified to preserve as much alpha channel information as
possible in the resulting palette, in addition to preserving colors as
well as possible. This does not work as well as might be hoped. It is
usually best to simply produce a truecolor output image instead, which
guarantees the highest output quality.
dither indicates if the image should be dithered -
if it is TRUE then dithering will be used which will result in a more
speckled image but with better color approximation.
ncolors sets the maximum number of colors that
should be retained in the palette.
Замечание: Эта функция нуждается в GD версии 2.0.1 или выше.
imagetruecolortopalette
burninleo at gmx dot net
28-May-2006 09:51
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);
$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 at fnatic dot com
24-Feb-2006 12:49
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;
}
}
?>
zmorris at zsculpt dot com
16-Aug-2004 10:58
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 );
}
?>
php at roelvanmastbergen dot nl
06-Jun-2004 09:34
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.
jemore at nospaM dot m6net dot fr
22-Nov-2003 10:25
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.
| |