imagecreatetruecolor用于什么?

时间:2013-06-08 18:37:07

标签: php image

根据

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

一般来说,我需要这么多中间图像表示才能生成结束文件吗?

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

1 个答案:

答案 0 :(得分:3)

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

现在,至于imagecreatetruecolorimagecreate相对的是什么,您需要了解有两种主要的颜色表示形式:

  1. 索引颜色,文件由一个颜色的托盘组成,其余图像类似于“按颜色分类”的书。除了引用此索引中的颜色之外,indixes没有任何意义。

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

  3. 这意味着直接蝙蝠索引颜色图像比真彩色图像小四倍(对于颜色索引使用1个字节而不是整个颜色使用4个字节),但是它限制为256种不同颜色,并且通常其中一个是透明的。

    现在,由于您使用的是JPEG,因此您需要使用imagecreatetruecolor,因为JPEG压缩几乎需要这样做。 JPEG不支持索引图像。

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