Php 重新创建的png图像为黑色

Php 重新创建的png图像为黑色,php,image-processing,gd,Php,Image Processing,Gd,注:SO已将上述参考图像转换为jpeg。这是你的电话号码 下面是在新画布上重新创建png图像并保持透明度的示例代码。如您所见,它还允许像素级操作,例如使用自定义函数,如custom_func($r,$g,$b),这在问题的底部得到了更好的说明 基本上,此代码在新画布上成功地重新创建/重画了上述图像。请注意,上图中的天空是完全透明的 更新 这里证明了示例图像确实是透明的,并且可以对其进行操作,同时保持透明度。请注意,现在图像的底部更为褐色。这是通过稍微修改这一行imagesetpixel($n

注:SO已将上述参考图像转换为jpeg。这是你的电话号码


下面是在新画布上重新创建png图像并保持透明度的示例代码。如您所见,它还允许像素级操作,例如使用自定义函数,如
custom_func($r,$g,$b)
,这在问题的底部得到了更好的说明


基本上,此代码在新画布上成功地重新创建/重画了上述图像。请注意,上图中的天空是完全透明的


更新 这里证明了示例图像确实是透明的,并且可以对其进行操作,同时保持透明度。请注意,现在图像的底部更为褐色。这是通过稍微修改这一行
imagesetpixel($new_image,$x,$y,imagecolorallocatealpha($image,100,$g,$b,$alpha))


您的第二幅图像是8位的,这意味着它最多只能支持256种颜色。这使得它成为“基于调色板”的图像,因此它不支持alpha透明度

只需在创建
$image
后添加以下行,即可解决此问题:

imagepalettetotruecolor($image);
这对已经是真彩色的图像没有任何影响,因此
grass.png
将继续正确处理。从:

如果转换已完成,则返回TRUE;如果源图像已经是真彩色图像,则返回FALSE;否则返回FALSE


请注意,上图中的天空是完全透明的。试着在非白色背景下看,它是JPG。您的代码需要PNG。你上传了正确的文件吗?不知道,所以将PNG转换为.jpeg。不管怎样,我现在会用证据更新这篇文章。肯定有效,你知道为什么32kb的图片在娱乐上变成119kb吗?因为它保存为32位图像,而不是原始的8位格式。您需要使用反转操作以再次减小文件大小。
array (size=6)
  0 => int 228
  1 => int 230
  2 => int 3
  3 => string 'width="228" height="230"' (length=24)
  'bits' => int 8
  'mime' => string 'image/png' (length=9)
imagepalettetotruecolor($image);