2011-03-23 43 views
0

我有一个图像文件,128字节的标题,其次是原始RGBA数据,宽度和高度存储在偏移量72和74作为短整数(大端)。我已经成功读取了标题,但是,我需要一种将原始RGBA另存为PNG格式和/或GIF的方法。我怎么能在PHP中做到这一点?PHP保存原始RGBA为PNG/GIF

欢呼

回答

1

如果有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]; 
+0

我该如何去寻找原始像素数据中的颜色?我在看'imagecolorat()',但该函数需要一个图像处理程序,我没有这个任何建议? – 2011-03-23 13:29:30

+1

我编辑了以上答案 – Darcara 2011-03-23 13:51:49

+0

谢谢:)我不得不解开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

1

尽管您可以生成从源流自己,这需要很多的努力未压缩的PNG。 (需要手工编写png32头文件,并写出未压缩的deflate块,因为PNG本身不支持未压缩的有效载荷)。

imagemagick更容易。只需将原料RGBA流写出到一个临时文件,并使用:

file_put_contents("tmp.rgba", susbstr($data, 128)); 

exec("convert -size 640x300 -depth 8 tmp.rgba output.png"); 
+0

不幸的是我的主机不支持ImageMagick,因此我无法使用它。 :( – 2011-03-23 13:23:56