PHP сохранить сырой RGBA как PNG / GIF - PullRequest
0 голосов
/ 23 марта 2011

У меня есть файл изображения со 128-байтовым заголовком, за которым следуют необработанные данные RGBA, а ширина и высота сохраняются со смещением 72 и 74 как короткие целые числа (с прямым порядком байтов).Я успешно смог прочитать заголовок, однако мне нужен способ сохранить сырой RGBA в формате PNG и / или GIF.Как я могу сделать это в PHP?

ура

Ответы [ 3 ]

1 голос
/ 23 марта 2011

Несмотря на то, что вы можете самостоятельно генерировать несжатый PNG из вашего исходного потока, это требует больших усилий.(Нужно вручную обработать заголовок png32 и записать несжатые фрагменты с выкачиванием, потому что сам PNG не поддерживает несжатых полезных данных).Просто запишите исходный поток RGBA во временный файл и используйте:

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

exec("convert -size 640x300 -depth 8   tmp.rgba output.png");
1 голос
/ 23 марта 2011

Если у вас установлен gd lib (проверьте с помощью 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);

EDIT

Вы сказали, что это данные 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 голосов
/ 23 марта 2011

Я бы посмотрел на БД или imagemagick Один или оба из них должны сделать трюк

...