我有一个图像文件,128字节的标题,其次是原始RGBA数据,宽度和高度存储在偏移量72和74作为短整数(大端)。我已经成功读取了标题,但是,我需要一种将原始RGBA另存为PNG格式和/或GIF的方法。我怎么能在PHP中做到这一点?PHP保存原始RGBA为PNG/GIF
欢呼
我有一个图像文件,128字节的标题,其次是原始RGBA数据,宽度和高度存储在偏移量72和74作为短整数(大端)。我已经成功读取了标题,但是,我需要一种将原始RGBA另存为PNG格式和/或GIF的方法。我怎么能在PHP中做到这一点?PHP保存原始RGBA为PNG/GIF
欢呼
如果有GD库安装(请与phpinfo()函数;)它像
//create image
$img = imagecreatetruecolor($width, $height);
//fill by iterating through your raw pixel data
imagesetpixel($img, $x, $y, $color);
//output
header("Content-Type: image/png");
imagepng($img);
//cleanup
imagedestroy($img);
编辑
你说这是RGBA数据。假设每个通道的标准4字节和你的原始数据是一个整数数组,它应该是:
$pos = ($y * $width + $x) * 4 + ($headerLengthInBytes/4);
$red = $rawImageData[$pos];
$green = $rawImageData[$pos + 1];
$blue = $rawImageData[$pos + 2];
$alpha = $rawImageData[$pos + 3];
我想看看gd或imagemagick一个或两个的这些应该做的伎俩
尽管您可以生成从源流自己,这需要很多的努力未压缩的PNG。 (需要手工编写png32头文件,并写出未压缩的deflate块,因为PNG本身不支持未压缩的有效载荷)。
imagemagick更容易。只需将原料RGBA流写出到一个临时文件,并使用:
file_put_contents("tmp.rgba", susbstr($data, 128));
exec("convert -size 640x300 -depth 8 tmp.rgba output.png");
不幸的是我的主机不支持ImageMagick,因此我无法使用它。 :( – 2011-03-23 13:23:56
我该如何去寻找原始像素数据中的颜色?我在看'imagecolorat()',但该函数需要一个图像处理程序,我没有这个任何建议? – 2011-03-23 13:29:30
我编辑了以上答案 – Darcara 2011-03-23 13:51:49
谢谢:)我不得不解开RGBA,但最后工作。最终代码如下所示: '$ pos =($ y * $ width + $ x)* 4; list($ red,$ green,$ blue,$ alpha)= array_values(unpack(“C4”,substr($ buffer,$ pos,$ pos + 4)));' – 2011-03-23 14:09:28