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

Php 将PNG-8转换为PNG-24(或其他格式),php,png,metadata,Php,Png,Metadata,我有一个PHP应用程序,其中 用户上传扫描图像(png或jpg) 我创建了保存为透明png的注释 这些注释“嵌入”到扫描中,输出为png文件 除非图像是PNG-8,否则所有这些都可以正常工作。所以,我不知道这是否可行,但我可以将PNG-8转换为PNG-24(或其他类型的PNG)吗 我对PNG类型了解不多,但据我所知,工作图像的元数据如下所示 <javax_imageio_png_1.0> <IHDR width="600" height="764" bitDepth="8" c

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

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

    我对PNG类型了解不多,但据我所知,工作图像的元数据如下所示

    <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>
    
    
    
    来自失败映像的元数据如下所示

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

    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