• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • imagepalettetotruecolor()

    (PHP 5 >= 5.5.0, PHP 7)

    Converts a palette based image to true color

    说明

    imagepalettetotruecolor(resource $src): bool

    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.

    范例

    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
    

    参见

    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);
    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;
      }
    }
    ?>
    
    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;
      }
    }
    ?>
    

    上篇:imagepalettecopy()

    下篇:imagepng()