0

我有一个 PHP 应用程序,其中...

  1. 用户上传扫描图像(png 或 jpg)
  2. 我创建了保存为透明 png 的注释。
  3. 这些注释被“嵌入”到扫描中,输出是一个 png 文件。

除非图像是 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>
4

1 回答 1

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
于 2013-04-26T03:00:30.360 回答