이미지 처리 및 GD
이미지 처리 및 GD
PHP는 HTML 출력만 만드는 데 그치지 않아요. 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()로 잡아내는 방법을 쓸 수 있어요.