我有一個圖像文件,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