2011-03-23 2 views
0

128MB 헤더와 원시 RGBA 데이터가있는 이미지 파일이 있으며 너비와 높이가 오프셋 정수 72로 저장됩니다 (빅 엔디안). 헤더를 성공적으로 읽을 수 있었지만 원시 RGBA를 PNG 형식 및/또는 GIF로 저장하는 방법이 필요합니다. PHP로 어떻게 할 수 있습니까? 당신이 노력을 많이 걸립니다 소스를 직접 스트리밍에서 압축되지 않은 PNG를 생성 할 수 있지만PHP로 원시 RGBA를 PNG/GIF로 저장합니다.

환호

답변

1

당신이있는 경우 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]; 
+0

원시 픽셀 데이터에서 색상을 찾는 방법은 무엇입니까? imagecolorat()를보고 있었지만 그 함수에는 이미지 처리기가 필요합니다. 어떤 제안이 있습니까? –

+1

나는 – Darcara

+0

고맙습니다. 저는 RGBA를 풀어야했지만 끝내야했습니다. 최종 코드는 다음과 같습니다 : '$ pos = ($ y * $ width + $ x) * 4;list ($ red, $ green, $ blue, $ alpha) = array_values ​​(unpack ("C4", substr ($ buffer, $ pos, $ pos + 4))); –

1

을해야 gd 또는 imagemagick 하나 또는이 두 가지에 보일 것이다. (PNG32 헤더를 수작업으로 만들어야하고, PNG 자체가 압축되지 않은 페이로드를 지원하지 않기 때문에 압축되지 않은 수축 된 청크를 작성해야합니다.)

imagemagick을 사용하면 더 쉽습니다. 단순히 임시 파일에 원시 RGBA 스트림을 작성하고 사용

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

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

불행히도 내 호스트는 ImageMagick을 지원하지 않으므로 사용할 수 없습니다. : –

관련 문제