Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP에서 이진 데이터로 이미지 재생성 및 표시하는 방법

PHP에서는 데이터 URI(Data URI) 스킴을 활용하면 이미지 파일을 디스크에 따로 저장하지 않고도 이진 데이터(binary data)만으로 이미지를 다시 만들어 브라우저에 바로 표시할 수 있습니다. 핵심은 <img> 태그의 src 속성에 데이터 URI를 직접 지정하는 것으로, 이 방식은 이미지를 가공한 후 임시 파일로 저장할 필요가 없어 매우 효율적입니다.

데이터 URI의 기본 형식

data:[<MIME-type>][;charset="<encoding>"][;base64],<data>
  • MIME-type: 이미지의 유형을 나타냅니다(예: image/png, image/jpeg).
  • charset: 문자 인코딩 방식을 지정합니다.
  • base64: 데이터가 base64로 인코딩되었음을 의미합니다.
  • data: 실제 인코딩된 데이터 값입니다.

PHP 구현 예제

<?php
   function data_uri($file, $mime) {
      $contents = file_get_contents($file);
      $base64   = base64_encode($contents);
      return ('data:' . $mime . ';base64,' . $base64);
   }
?>
<img src="<?php echo data_uri('some_image.png', 'image/png'); ?>" alt="Image sample" />

코드 동작 원리

data_uri() 함수는 다음 순서로 동작합니다.

  1. file_get_contents() 함수로 이미지 파일의 내용을 읽어 $contents 변수에 담습니다.
  2. base64_encode() 함수를 통해 해당 내용을 base64 형식으로 인코딩합니다.
  3. MIME 타입과 인코딩된 데이터를 연결한 완전한 데이터 URI 문자열을 반환합니다.

반환된 값을 <img> 태그의 src 속성에 출력하면, 브라우저가 이진 데이터를 해석하여 이미지를 화면에 그려 줍니다. 즉, 이미지를 이 함수에 전달하는 것만으로 재생성과 표시가 한 번에 이루어집니다.

활용 시 참고 사항

  • 이미지를 가공한 후 디스크에 저장하지 않고 곧바로 출력해야 하는 상황에서 특히 유용합니다.
  • base64 인코딩은 원본 대비 약 33% 정도 크기가 증가하므로, 용량이 큰 이미지에는 적합하지 않습니다.
  • CSS 배경 이미지나 이메일 템플릿처럼 외부 리소스 로딩이 어려운 환경에서도 활용할 수 있습니다.
  • 모든 주요 최신 브라우저에서 데이터 URI를 지원하지만, 구형 브라우저(예: IE 8 이하)는 크기 제한 등으로 동작이 제한될 수 있습니다.