2012-02-21 3 views
15

ImagePng()을 사용하여 이미지를 만들었습니다. 나는이 작동하지 않습니다PHP : ImagePng으로 이미지를 만들고 base64_encode로 단일 파일로 변환 하시겠습니까?

print '<p><img src="data:image/png;base64,'.base64_encode(ImagePng($png)).'" alt="image 1" width="96" height="48"/></p>'; 

처럼,이 파일 시스템에 이미지를 저장하려는 해달라고했지만 base64로 인코딩 인라인 이미지와 같은 페이지에 출력을 원하는.

하나의 PHP 파일에서 가능합니까?

미리 감사드립니다.

답변

27

여기서 유용한 것은 출력 버퍼링을 사용하여 브라우저 나 파일로 출력을 보내는 imagepng()의 출력을 캡처하는 것입니다.

// Enable output buffering 
ob_start(); 
imagepng($png); 
// Capture the output 
$imagedata = ob_get_contents(); 
// Clear the output buffer 
ob_end_clean(); 

print '<p><img src="data:image/png;base64,'.base64_encode($imagedata).'" alt="image 1" width="96" height="48"/></p>'; 

the imagepng() docs.

5

와 PHP 사용시는 문제가 ob_get_contents를 사용하여()를 가지고있는 유저 예에서 적응된다 : 그것은 변수에 저장한다 (또는베이스 64 인코딩)를 호출하지 않는다 AJAX, 그래서 이것을 시도 :

$id = generateID(); //Whereas this generates a random ID number 
$file="testimage".$id.".png"; 
imagepng($image, $file); 
imagedestroy($image); 
echo(base64_encode(file_get_contents($file))); 
unlink($file); 

이것은 임시 이미지 파일을 서버에 저장하고 인코딩되고 에코 아웃 후 제거됩니다.

0

명백한 파일에 저장하고 싶지 않고 이미 다른 파일로 ob_start()을 사용하고 있다면 (많은 리팩토링없이이 경우 ob_start를 사용할 수 없으므로) 사용자가 직접 저장하는 스트림 래퍼를 정의 할 수 있습니다 변수 출력.

stream_wrapper_register을 사용하여 새로운 스트림 래퍼를 등록하고 나중에 stream_write 메서드를 구현하여 값을 나중에 검색 할 수있는 변수에 쓸 수 있습니다. 그런 다음이 스트림 (실제로이 스트림의 URI를 전달해야 함)을 imagepng으로 전달합니다. imagepng 스트림을 닫으 려해도 스트림 래퍼가 데이터를 닫을 때 데이터를 삭제하지 않는 한 사용자를 괴롭히지 않습니다 (stream_close 메서드가 호출 됨).

관련 문제