이미지 처리 및 GD

이미지 처리 및 GD

PHP는 HTML 출력만 만드는 데 그치지 않아요. GD 라이브러리를 이용하면 이미지 파일을 직접 생성하고 조작할 수도 있답니다. 실무에서 썸네일을 만들거나 이미지에 워터마크를 넣을 때 자주 쓰이는 기능이에요.

출처: Image Processing and GD

본문

PHP는 HTML 출력만 만드는 것에 한정되지 않아요. GIF, PNG, JPEG, WBMP, XPM을 포함한 다양한 이미지 형식의 파일을 생성하고 조작하는 데에도 쓸 수 있어요. 더 편리한 점은 PHP가 이미지 스트림을 브라우저로 직접 출력할 수 있다는 거예요. 이 기능을 쓰려면 PHP를 GD 이미지 함수 라이브러리와 함께 컴파일해야 해요. 어떤 이미지 형식을 다룰지에 따라 GD와 PHP가 추가 라이브러리를 필요로 할 수도 있어요.

PHP의 image 함수를 사용하면 JPEG, GIF, PNG, SWF, TIFF, JPEG2000 이미지의 크기를 구할 수 있어요.

exif 확장을 쓰면 JPEG과 TIFF 이미지의 헤더에 저장된 정보를 다룰 수 있어요. 이로써 디지털 카메라가 생성한 메타데이터를 읽을 수 있죠. exif 함수는 GD 라이브러리가 필요하지 않아요.

주의할 점들도 있어요.

  • 이미지 읽기·쓰기·수정 기능을 확장하려면 requirements 섹션을 읽어 보세요. 디지털 카메라 사진의 메타데이터를 읽으려면 앞서 언급한 exif 확장이 필요해요.
  • getimagesize() 함수는 GD 확장이 필요하지 않아요.
  • 번들된 GD 라이브러리는 메모리 할당에 Zend 메모리 매니저를 사용하지만, 시스템 버전은 그렇지 않아서 memory_limit이 적용되지 않아요.

GD가 지원하는 형식

형식 읽기 쓰기 비고
JPEG true true
PNG true true
GIF true true
XBM true true
XPM true false
WBMP true true
WebP true true
BMP true true PHP 7.2.0부터 사용 가능

위 표에서 대부분의 형식이 읽기·쓰기를 모두 지원한다고 해서, PHP가 그 형식들을 모두 지원하도록 컴파일되었다는 뜻은 아니에요. 컴파일 시점에 GD에서 어떤 형식을 사용할 수 있었는지 확인하려면 gd_info() 함수를 사용하면 돼요. 하나 이상의 형식에 대한 컴파일 지원에 관한 자세한 내용은 설치 장을 참고하세요.

GD 및 Image 함수들

  • gd_info — 현재 설치된 GD 라이브러리에 대한 정보 조회
  • getimagesize — 이미지 크기 가져오기
  • getimagesizefromstring — 문자열에서 이미지 크기 가져오기
  • image_type_to_extension — 이미지 타입에 대한 파일 확장자 가져오기
  • image_type_to_mime_type — getimagesize, exif_read_data, exif_thumbnail, exif_imagetype이 반환한 이미지 타입의 Mime-Type 가져오기
  • image2wbmp — 이미지를 브라우저나 파일로 출력
  • imageaffine — 선택적 클리핑 영역을 사용해 affine 변환된 src 이미지를 담은 이미지 반환
  • imageaffinematrixconcat — 두 affine 변환 행렬 연결
  • imageaffinematrixget — affine 변환 행렬 가져오기
  • imagealphablending — 이미지의 블렌딩 모드 설정
  • imageantialias — 안티앨리어싱 함수 사용 여부
  • imagearc — 호(arc) 그리기
  • imageavif — 이미지를 브라우저나 파일로 출력
  • imagebmp — BMP 이미지를 브라우저나 파일로 출력
  • imagechar — 문자를 가로로 그리기
  • imagecharup — 문자를 세로로 그리기
  • imagecolorallocate — 이미지에 색상 할당
  • imagecolorallocatealpha — 이미지에 색상 할당(alpha 포함)
  • imagecolorat — 픽셀의 색상 인덱스 가져오기
  • imagecolorclosest — 지정된 색상에 가장 가까운 색상의 인덱스 가져오기
  • imagecolorclosestalpha — 지정된 색상 + alpha에 가장 가까운 색상의 인덱스 가져오기
  • imagecolorclosesthwb — hue, white, blackness를 가진 색상의 인덱스 가져오기
  • imagecolordeallocate — 이미지 색상 할당 해제
  • imagecolorexact — 지정된 색상의 인덱스 가져오기
  • imagecolorexactalpha — 지정된 색상 + alpha의 인덱스 가져오기
  • imagecolormatch — 팔레트 버전 이미지의 색상이 트루컬러 버전과 더 가깝게 만들기
  • imagecolorresolve — 지정된 색상 또는 그에 가장 가까운 대안의 인덱스 가져오기
  • imagecolorresolvealpha — 지정된 색상 + alpha 또는 가장 가까운 대안의 인덱스 가져오기
  • imagecolorset — 지정된 팔레트 인덱스에 색상 설정
  • imagecolorsforindex — 인덱스에 대한 색상 가져오기
  • imagecolorstotal — 이미지 팔레트의 색상 수 알아내기
  • imagecolortransparent — 색상을 투명으로 정의
  • imageconvolution — 계수와 오프셋을 사용해 3x3 컨볼루션 행렬 적용
  • imagecopy — 이미지 일부 복사
  • imagecopymerge — 이미지 일부 복사·병합
  • imagecopymergegray — 회색조로 이미지 일부 복사·병합
  • imagecopyresampled — 리샘플링으로 이미지 일부 복사·리사이즈
  • imagecopyresized — 이미지 일부 복사·리사이즈
  • imagecreate — 새 팔레트 기반 이미지 생성
  • imagecreatefromavif — 파일 또는 URL에서 새 이미지 생성
  • imagecreatefrombmp — 파일 또는 URL에서 새 이미지 생성
  • imagecreatefromgd — GD 파일 또는 URL에서 새 이미지 생성
  • imagecreatefromgd2 — GD2 파일 또는 URL에서 새 이미지 생성
  • imagecreatefromgd2part — GD2 파일 또는 URL의 특정 부분에서 새 이미지 생성
  • imagecreatefromgif — 파일 또는 URL에서 새 이미지 생성
  • imagecreatefromjpeg — 파일 또는 URL에서 새 이미지 생성
  • imagecreatefrompng — 파일 또는 URL에서 새 이미지 생성
  • imagecreatefromstring — 문자열의 이미지 스트림에서 새 이미지 생성
  • imagecreatefromtga — 파일 또는 URL에서 새 이미지 생성
  • imagecreatefromwbmp — 파일 또는 URL에서 새 이미지 생성
  • imagecreatefromwebp — 파일 또는 URL에서 새 이미지 생성
  • imagecreatefromxbm — 파일 또는 URL에서 새 이미지 생성
  • imagecreatefromxpm — 파일 또는 URL에서 새 이미지 생성
  • imagecreatetruecolor — 새 트루컬러 이미지 생성
  • imagecrop — 이미지를 주어진 사각형으로 자르기
  • imagecropauto — 사용 가능한 모드 중 하나로 이미지를 자동 자르기
  • imagedashedline — 점선 그리기
  • imagedestroy — 이미지 파괴
  • imageellipse — 타원 그리기
  • imagefill — 플러드 필(flood fill)
  • imagefilledarc — 부분 호를 그리고 채우기
  • imagefilledellipse — 채워진 타원 그리기
  • imagefilledpolygon — 채워진 다각형 그리기
  • imagefilledrectangle — 채워진 사각형 그리기
  • imagefilltoborder — 특정 색상까지 플러드 필
  • imagefilter — 이미지에 필터 적용
  • imageflip — 주어진 모드로 이미지 뒤집기
  • imagefontheight — 글꼴 높이 가져오기
  • imagefontwidth — 글꼴 너비 가져오기
  • imageftbbox — freetype2 글꼴을 사용하는 텍스트의 바운딩 박스 제공
  • imagefttext — FreeType 2 글꼴을 사용해 이미지에 텍스트 쓰기
  • imagegammacorrect — GD 이미지에 감마 보정 적용
  • imagegd — GD 이미지를 브라우저나 파일로 출력
  • imagegd2 — GD2 이미지를 브라우저나 파일로 출력
  • imagegetclip — 클리핑 사각형 가져오기
  • imagegetinterpolation — 보간(interpolation) 방법 가져오기
  • imagegif — 이미지를 브라우저나 파일로 출력
  • imagegrabscreen — 전체 화면 캡처
  • imagegrabwindow — 창 캡처
  • imageinterlace — 인터레이스 활성화·비활성화
  • imageistruecolor — 이미지가 트루컬러인지 확인
  • imagejpeg — 이미지를 브라우저나 파일로 출력
  • imagelayereffect — 레이어링 효과를 위한 알파 블렌딩 플래그 설정
  • imageline — 선 그리기
  • imageloadfont — 새 글꼴 로드
  • imageopenpolygon — 열린 다각형 그리기
  • imagepalettecopy — 한 이미지에서 다른 이미지로 팔레트 복사
  • imagepalettetotruecolor — 팔레트 기반 이미지를 트루컬러로 변환
  • imagepng — PNG 이미지를 브라우저나 파일로 출력
  • imagepolygon — 다각형 그리기
  • imagerectangle — 사각형 그리기
  • imageresolution — 이미지 해상도 가져오기·설정
  • imagerotate — 주어진 각도로 이미지 회전
  • imagesavealpha — 저장 시 전체 알파 채널 정보 유지 여부
  • imagescale — 주어진 새 너비·높이로 이미지 스케일
  • imagesetbrush — 선 그리기용 브러시 이미지 설정
  • imagesetclip — 클리핑 사각형 설정
  • imagesetinterpolation — 보간 방법 설정
  • imagesetpixel — 단일 픽셀 설정
  • imagesetstyle — 선 그리기용 스타일 설정
  • imagesetthickness — 선 그리기용 두께 설정
  • imagesettile — 채우기용 타일 이미지 설정
  • imagestring — 문자열을 가로로 그리기
  • imagestringup — 문자열을 세로로 그리기
  • imagesx — 이미지 너비 가져오기
  • imagesy — 이미지 높이 가져오기
  • imagetruecolortopalette — 트루컬러 이미지를 팔레트 이미지로 변환
  • imagettfbbox — TrueType 글꼴을 사용하는 텍스트의 바운딩 박스 제공
  • imagettftext — TrueType 글꼴을 사용해 이미지에 텍스트 쓰기
  • imagetypes — 이 PHP 빌드가 지원하는 이미지 타입 반환
  • imagewbmp — 이미지를 브라우저나 파일로 출력
  • imagewebp — WebP 이미지를 브라우저나 파일로 출력
  • imagexbm — XBM 이미지를 브라우저나 파일로 출력
  • iptcembed — JPEG 이미지에 이진 IPTC 데이터 내장
  • iptcparse — 이진 IPTC 블록을 개별 태그로 파싱
  • jpeg2wbmp — JPEG 이미지 파일을 WBMP 이미지 파일로 변환
  • png2wbmp — PNG 이미지 파일을 WBMP 이미지 파일로 변환

클래스

  • GdImage — GdImage 클래스
  • GdFont — GdFont 클래스

더 알아보기

  • 이미지를 파일이 아니라 문자열로 얻고 싶다면, imagepng() 같은 출력 함수를 출력 버퍼링(ob_start()) 안에서 호출한 뒤 ob_get_contents()로 잡아내는 방법을 쓸 수 있어요.