2011-03-23 145 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