imagepalettetotruecolor
(PHP 5 >= 5.5.0, PHP 7, PHP 8)
imagepalettetotruecolor — Converts a palette based image to true color
说明
Converts a palette based image, created by functions like imagecreate() to a true color image, like imagecreatetruecolor().
返回值
Returns true
if the convertion was complete, or if the source image already
is a true color image, otherwise false
is returned.
更新日志
版本 | 说明 |
---|---|
8.0.0 |
image expects a GdImage
instance now; previously, a resource was expected.
|
范例
示例 #1 Converts any image object 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
参见
- imagecreatetruecolor() - 新建一个真彩色图像
- imageistruecolor() - 检查图像是否为真彩色图像

User Contributed Notes 3 notes
Polda18 ¶
8 years ago
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 - iftfy ¶
5 years ago
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;
}
}
?>
walf ¶
8 years ago
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;
}
}
?>
备份地址:http://www.lvesu.com/blog/php/function.imagepalettetotruecolor.php