imagepalettetotruecolor

(PHP 5 >= 5.5.0, PHP 7)

imagepalettetotruecolorConverts a palette based image to true color

说明

bool imagepalettetotruecolor ( resource $src )

Converts a palette based image, created by functions like imagecreate() to a true color image, like imagecreatetruecolor().

参数

image

由图象创建函数(例如imagecreatetruecolor())返回的图象资源。

返回值

Returns TRUE if the convertion was complete, or if the source image already is a true color image, otherwise FALSE is returned.

范例

Example #1 Converts any image resource to true color

<?php
// Backwards compatiblity
if(!function_exists('imagepalettetotruecolor'))
{
    function 
imagepalettetotruecolor(&$src)
    {
        if(
imageistruecolor($src))
        {
            return(
true);
        }

        
$dst imagecreatetruecolor(imagesx($src), imagesy($src));

        
imagecopy($dst$src0000imagesx($src), imagesy($src));
        
imagedestroy($src);

        
$src $dst;

        return(
true);
    }
}

// Helper closure
$typeof = function() use($im)
{
    echo 
'typeof($im) = ' . (imageistruecolor($im) ? 'true color' 'palette'), PHP_EOL;
};

// Create a palette based image
$im imagecreate(100100);
$typeof();

// Convert it to true color
imagepalettetotruecolor($im);
$typeof();

// Free the memory
imagedestroy($im);
?>

以上例程会输出:

typeof($im) = palette
typeof($im) = true color

参见

User Contributed Notes

walf - iftfy 18-Mar-2017 12:46
here the working version of walf's solution

<?php
// Backwards compatiblity
if (!function_exists('imagepalettetotruecolor')) {
    function
imagepalettetotruecolor(&$src) {
        if (
imageistruecolor($src)) {
            return
true;
        }

       
$dst = imagecreatetruecolor(imagesx($src), imagesy($src));
    
       
imagealphablending($dst, false);//prevent blending with default black
       
$transparent = imagecolorallocatealpha($dst, 255, 255, 255, 127);//change the RGB values if you need, but leave alpha at 127
       
imagefilledrectangle($dst, 0, 0, imagesx($src), imagesy($src), $transparent);//simpler than flood fill
       
imagealphablending($dst, true);//restore default blending

       
imagecopy($dst, $src, 0, 0, 0, 0, imagesx($src), imagesy($src));
       
imagedestroy($src);

       
$src = $dst;
        return
true;
    }
}
?>
Polda18 30-Apr-2014 11:44
PHP ver 5.4.24 does not support this function (it has not been defined). To get rid of this, you must copy image resource to new image created by function imagecreatetruecolor();

Example with image loaded from GIF file:

$image  = imagecreatefromgif("path/to/gif/file.gif");  //create an image from GIF
$width  = imagesx($image);                             //get width of source image
$height = imagesy($image);                             //get height of source image
$image2 = imagecreatetruecolor($width,$height);        //create new image of true colors with given width and height
imagecopy($image2,$image,0,0,0,0,$width,$height);      //copy source image to new one

header("Content-Type: image/jpeg");                    //set header for JPG image
imagejpg($image2);                                     //render JPg image into browser

imagedestroy($image);                                  //free up memory
imagedestroy($image2);
walf 21-Mar-2014 03:20
The backwards compatibility example does not preserve transparency. You must first wipe out the default black background on the new image:

<?php
// Backwards compatiblity
if (!function_exists('imagepalettetotruecolor')) {
    function
imagepalettetotruecolor(&$src) {
        if (
imageistruecolor($src)) {
            return
true;
        }

       
$dst = imagecreatetruecolor(imagesx($src), imagesy($src));
       
       
imagealphablending($dst, false);//prevent blending with default black
       
$transparent = imagecolorallocatealpha($new_image, 255, 255, 255, 127);//change the RGB values if you need, but leave alpha at 127
       
imagefilledrectangle($dst, 0, 0, $imagesx($src), imagesy($src), $transparent);//simpler than flood fill
       
imagealphablending($dst, true);//restore default blending

       
imagecopy($dst, $src, 0, 0, 0, 0, imagesx($src), imagesy($src));
       
imagedestroy($src);

       
$src = $dst;
        return
true;
    }
}
?>