128MB 헤더와 원시 RGBA 데이터가있는 이미지 파일이 있으며 너비와 높이가 오프셋 정수 72로 저장됩니다 (빅 엔디안). 헤더를 성공적으로 읽을 수 있었지만 원시 RGBA를 PNG 형식 및/또는 GIF로 저장하는 방법이 필요합니다. PHP로 어떻게 할 수 있습니까? 당신이 노력을 많이 걸립니다 소스를 직접 스트리밍에서 압축되지 않은 PNG를 생성 할 수 있지만PHP로 원시 RGBA를 PNG/GIF로 저장합니다.
환호
128MB 헤더와 원시 RGBA 데이터가있는 이미지 파일이 있으며 너비와 높이가 오프셋 정수 72로 저장됩니다 (빅 엔디안). 헤더를 성공적으로 읽을 수 있었지만 원시 RGBA를 PNG 형식 및/또는 GIF로 저장하는 방법이 필요합니다. PHP로 어떻게 할 수 있습니까? 당신이 노력을 많이 걸립니다 소스를 직접 스트리밍에서 압축되지 않은 PNG를 생성 할 수 있지만PHP로 원시 RGBA를 PNG/GIF로 저장합니다.
환호
당신이있는 경우 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);
편집
같은 뭔가당신은 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 하나 또는이 두 가지에 보일 것이다. (PNG32 헤더를 수작업으로 만들어야하고, PNG 자체가 압축되지 않은 페이로드를 지원하지 않기 때문에 압축되지 않은 수축 된 청크를 작성해야합니다.)
imagemagick을 사용하면 더 쉽습니다. 단순히 임시 파일에 원시 RGBA 스트림을 작성하고 사용
file_put_contents("tmp.rgba", susbstr($data, 128));
exec("convert -size 640x300 -depth 8 tmp.rgba output.png");
불행히도 내 호스트는 ImageMagick을 지원하지 않으므로 사용할 수 없습니다. : –
원시 픽셀 데이터에서 색상을 찾는 방법은 무엇입니까? imagecolorat()를보고 있었지만 그 함수에는 이미지 처리기가 필요합니다. 어떤 제안이 있습니까? –
나는 – Darcara
고맙습니다. 저는 RGBA를 풀어야했지만 끝내야했습니다. 최종 코드는 다음과 같습니다 : '$ pos = ($ y * $ width + $ x) * 4;list ($ red, $ green, $ blue, $ alpha) = array_values (unpack ("C4", substr ($ buffer, $ pos, $ pos + 4))); –