将PNG-8转换为PNG-24(或其他)

时间:2013-04-26 02:57:17

标签: php png metadata

我有一个PHP应用程序......

  1. 用户上传扫描图像(png或jpg)
  2. 我创建了保存为透明png的注释。
  3. 这些注释被“嵌入”到扫描中,输出是一个png文件。
  4. 除非图像是PNG-8,否则一切正常。所以,我不知道这是否可行,但我可以将PNG-8转换为PNG-24(或其他类型的PNG)吗?

    我对PNG类型了解不多,但根据http://www.fileformat.info,工作图像的元数据看起来像这样......

    <javax_imageio_png_1.0>
    <IHDR width="600" height="764" bitDepth="8" colorType="RGB" compressionMethod="deflate" filterMethod="adaptive" interlaceMethod="none"/>
    <pHYs pixelsPerUnitXAxis="7874" pixelsPerUnitYAxis="7874" unitSpecifier="meter"/>
    <tIME year="2013" month="4" day="25" hour="14" minute="9" second="17"/>
    </javax_imageio_png_1.0>
    

    来自失败图像的元数据看起来像这样......

    <javax_imageio_png_1.0>
    <IHDR width="600" height="755" bitDepth="8" colorType="Grayscale" compressionMethod="deflate" filterMethod="adaptive" interlaceMethod="none"/>
    <pHYs pixelsPerUnitXAxis="7874" pixelsPerUnitYAxis="7874" unitSpecifier="meter"/>
    <tIME year="2013" month="4" day="23" hour="21" minute="10" second="33"/>
    </javax_imageio_png_1.0>
    

1 个答案:

答案 0 :(得分:1)

PNG-8是指带有索引调色板的PNG图像。它几乎总是一个较小的文件大小,但限制为256色。 PNG-24是全彩色的。

在PHP中将调色板图像转换为全彩图像的最简单方法是:

$src = imagecreatefrompng("my-indexed-image.png");
$dst = imagecreatetruecolor($w=imagesx($src),$h=imagesy($src));
imagecopy($dst,$src,0,0,0,0,$w,$h);
imagedestroy($src);
// now do stuff with $dst