imagecreatetruecolor的作用是什么?


What is imagecreatetruecolor used for?

根据

http://php.net/manual/en/function.imagecreatetruecolor.php

它创建一个新的真彩色图像

但再往下是状态:

…返回表示a的图像标识符指定大小的黑色图像。

这是我用来上传图像(创建JPEG)的一些代码,如下所示:

private function createFinalJPEG($max, $path)
{
    $this->makeDimensions($max);
    $this->image_y = imagecreatetruecolor($this->new_width, $this->new_height);
    imagecopyresampled($this->image_y, $this->image_z, 0, 0, 0, 0, 
            $this->new_width, $this->new_height,
            $this->original_width, $this->original_height);
    imagejpeg($this->image_y, $path);
    imagedestroy($this->image_y);
}

一般来说,我需要这么多中间图像表示来生成最终文件吗?

是imagecreatetruecololor简单地创建一个哑的黑色图像用作占位符,imagecopyresampled可以使用?

下面是image_z的创建方式:

private function createImageZ($path)
{
    $type_creators = array(
        'image/gif' => 'imagecreatefromgif',
        'image/pjpeg' => 'imagecreatefromjpeg',
        'image/jpeg' => 'imagecreatefromjpeg',
        'image/png' => 'imagecreatefrompng');
    if(array_key_exists($this->fileType, $type_creators))
    {
        $this->image_z = $type_creators[$this->fileType]($path);
        return true;
    }
    return false;
}

"So many"?只有一个。由于画布的大小不能改变,你必须创建一个新的画布(图像资源)来调整你的图像的大小。

现在,至于imagecreatetruecolorimagecreate的区别,你需要了解有两种主要的颜色表示类型:

  1. 索引颜色,其中文件由颜色调色板组成,图像的其余部分类似于"颜色按数字"的书。这些索引除了表示本索引中的一种颜色外,没有其他意义。

  2. True color,其中图像的每个像素都完全指定其颜色。

这意味着立刻索引彩色图像比真彩色图像小四倍(使用1字节的颜色索引,而不是整个颜色的4字节),但是它被限制在256种不同的颜色,通常其中一种是为透明保留的。

现在,因为你在JPEG中工作,你会想要使用imagecreatetruecolor,因为JPEG压缩几乎需要这个。JPEG不支持索引图像。

另一方面,

GIF只支持索引颜色。PNG支持这两种格式(以及许多更晦涩的格式)。