imagetruecolortopalette

(PHP 4 >= 4.0.6, PHP 5)

imagetruecolortopalette Преобразование полноцветного изображения в палитровое

Описание

bool imagetruecolortopalette ( resource $image , bool $dither , int $ncolors )

imagetruecolortopalette() преобразует полноцветное изображение в палитровое. Код этой функции взят из кода библиотеки Независимой Группы JPEG. Код был модифицирован, чтобы сохранялось максимум информации об альфа компонентах цветов, а также передавались цвета в лучшем виде насколько это возможно. Но в итоге код работает не так хорошо, как хотелось бы. В связи с этим функцию можно использовать для вывода полноцветных изображений, она гарантирует самое высокое качество вывода. Но не более того.

Список параметров

image

Ресурс изображения, полученный одной из функций создания изображений, например, такой как imagecreatetruecolor().

dither

Если задано TRUE, изображение будет сглаживаться. Сглаживание увеличивает шумность картинки, но в то же время обеспечивает лучшую передачу цветов.

ncolors

Задает максимальное количество цветов в палитре.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Преобразование truecolor-изображения в палитровое

<?php
// Создание полноцветного изображения
$im imagecreatetruecolor(100100);

// Преобразование в палитровое (255 цветов) без сглаживания
imagetruecolortopalette($imfalse255);

// Сохранение картинки
imagepng($im'./paletteimage.png');
imagedestroy($im);
?>

Примечания

Замечание: Эта функция нуждается в GD версии 2.0.1 или выше.

Коментарии

TrueColor images should be converted to Palette images with this function. So, if you want to use imagecolorstotal() function [ function.imagecolorstotal ] , you should first convert the image to a palette image with imagetruecolortopalette();
2003-07-17 16:34:07
http://php5.kiev.ua/manual/ru/function.imagetruecolortopalette.html
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.
2003-11-22 12:25:38
http://php5.kiev.ua/manual/ru/function.imagetruecolortopalette.html
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.
2004-06-06 12:34:12
http://php5.kiev.ua/manual/ru/function.imagetruecolortopalette.html
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$image0000$width$height100 );
   
ImageTrueColorToPalette$image$dither$ncolors );
   
ImageColorMatch$colors_handle$image );
   
ImageDestroy$colors_handle );
}
?>
2004-08-17 01:58:26
http://php5.kiev.ua/manual/ru/function.imagetruecolortopalette.html
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;
        }
    }
?>
2006-02-24 14:49:19
http://php5.kiev.ua/manual/ru/function.imagetruecolortopalette.html
>> zmorris at zsculpt dot com

I don't have the imageColorMatch() function on my server, but I could slighty improve the quality of the GIF/PNG image by converting it first to 256 colors, then to true colors and finally to the desired number of colors.

<?php

$dither 
true;
$colors 64;

$tmp imageCreateFromJpeg('example.jpg');
$width imagesX($tmp);
$height imagesY($tmp);
imageTrueColorToPalette($tmp$dither256);
$image imageCreateTrueColor($width$height);
imageCopy($image$tmp0000$width$height);
imageDestroy($tmp);
imageTrueColorToPalette($image$dither$colors);

?>

Final $image will still have less than 64 colors, but more than if it was directly converted to 64 colors, and they match the JPEG image more.

Dunno why true colors to palette conversions are such a problem...
2008-09-21 09:52:02
http://php5.kiev.ua/manual/ru/function.imagetruecolortopalette.html

    Поддержать сайт на родительском проекте КГБ