©
This document uses PHP Chinese website manual Release
(PHP 5 >= 5.5.0, PHP 7)
imagepalettetotruecolor — Converts a palette based image to true color
$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 , $src , 0 , 0 , 0 , 0 , imagesx ( $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 ( 100 , 100 );
$typeof ();
// Convert it to true color
imagepalettetotruecolor ( $im );
$typeof ();
// Free the memory
imagedestroy ( $im );
?>
以上例程会输出:
typeof($im) = palette typeof($im) = true color
[#1] Polda18 [2014-04-30 14:44:20]
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);
[#2] walf [2014-03-21 06:20:15]
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;
}
}
?>