2

根据

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

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

但更进一步的是状态:

...返回一个图像标识符,表示指定大小的黑色图像。

这是我用于图像上传(创建 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);
}

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

imagecreatetruecolor 是否只是创建一个哑黑色图像用作 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;
}
4

1 回答 1

3

“很多”?只有一个。由于画布大小无法更改,因此您必须创建一个新画布(图像资源)来调整图像大小。

现在,至于imagecreatetruecolor与 just 相比做什么imagecreate,您需要了解颜色表示主要有两种类型:

  1. 索引颜色,其中文件由调色板组成,图像的其余部分类似于“按数字着色”的书。除了引用该索引中的颜色外,这些索引没有任何意义。

  2. 真彩色,图像的每个像素都完全指定其颜色。

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

现在,由于您使用的是 JPEG,因此您会想要使用它imagecreatetruecolor,因为 JPEG 压缩非常需要它。JPEG 不支持索引图像。

另一方面,GIF 仅支持索引颜色。PNG 支持两者(以及更多模糊的格式)。

于 2013-06-08T18:57:34.507 回答