
확장 프로그램은 PHP 인터프리터에 기능을 추가하여 추가적인 작업을 할 수 있도록 해준다. GD와 Imagick은 PHP 인터프리터가 이미지 크기를 조절하고 자르도록 하는 인기 있는 확장 프로그램이다.
GD 사용하기
GD를 사용하여 이미지 크기를 조절하고 자르려면 다섯 개의 GD 함수를 호출해야 한다.
- getimagesize() : 이미지의 크기와 미디어 타입을 가져온다.
- imagecreatefrommediatype() : 이미지를 연다(mediatype을 이미지의 미디어 타입으로 교체한다).
- imagecreatetruecolor() : 크기가 조절되거나 잘라낸 이미지 크기를 사용하여 새로운 빈 이미지를 생성한다.
- imagecopyresampled() : 원본 이미지에서 선택된 부분을 가져와서 크기를 조절하고, 이전 단계에서 만든 새로운 이미지에 붙여 넣는다.
- imagemediatype() : 이미지를 저장한다(_mediatyp_e을 이미지의 미디어 타입으로 교체한다).
미디어 타입 결정하기
이미지를 열거나 저장하기 위해 올바른 함수를 선택하려면, 이미지의 미디어 타입을 알아야 한다.
GD의 getimagesize() 함수는 인수로 이미지에 대한 경로가 필요하다. 이 함수는 미디어 타입을 포함하여 이미지에 대한 데이터가 포함된 배열 반환한다. 아래의 표는 그 배열에 포함된 데이터를 보여준다(키는 숫자와 단어가 혼합되어 있다).
키 : 설명
- 0 : 이미지의 너비(픽셀)
- 1 : 이미지의 높이(픽셀)
- 2 : 이미지 타입을 설명하는 상수
- 3 : img 태그에 사용할 크기를 가진 문자열(height="yyy" width="xxx")
- mime : 이미지의 미디어 타입
- channels : 이미지가 RGB이면 3, CMYK이면 4
- bits : 각 색상에 사용된 비트 수
이미지 열기 & 저장하기
이미지의 미디어 타입은 switch 문에서 사용할 수 있으므로 이미지를 열거나 저장하기 위해 올바른 함수를 호출한다.
아래의 표는 GD가 이미지 포맷을 열고 저장하기 위해 제공하는 일부 함수를 보여준다.
포맷 => 열기 => 저장
- GIF => imagecreatefromif() => imagegif()
- JPEG => imagecreatefromjpeg() => imagejpeg()
- PNG => imagecreatefrompng() => imagepng()
- WEBP => imagecreatefromwebp() => imagewebp()
이미지 크기 조절하기 그리고 자르기
imagecopyrempled() 함수는 이미지의 일부나 전체를 새로운 빈 이미지로 복사한다.
이 함수에는 10개의 매개변수가 있지만 5개의 매개변수 쌍으로 생각하는 게 더 쉽다.
- $new, $orig : 새 이미지와 원본 이미지(함수가 호출되기 전에 변수에 저장됨)
- $new_x, $new_y : 새로운 이미지에서 복사된 영역을 배치해야 하는 X-오프셋과 Y-오프셋
- $orig_x, $orig_y : 원본 이미지에서 선택된 영역을 가져와야 하는 X-오프셋과 Y-오프셋
- $new_width, $new_height : 새 이미지에서 선택 영역의 너비와 높이
- $orig_width, $orig_height : 원본 이미지에서 선택 영역의 너비와 높이
imagecopyresampled($new, $orig, $new_x, $new_y, $orig_x, $orig_y, $new_width, $new_height, $orig_width, $orig_height);
Imagick PHP 확장 프로그램을 사용하면 PHP 코드로 ImageMagick이라는 오픈소스 이미지 편집 소프트웨어를 제거할 수 있다. Imagick 확장 프로그램은
Imagick을 사용하려면, Imagick 클래스를 사용하여 이미지를 나타내는 객체를 생성하며 나타낼 이미지의 경로를 생성자에 전달한다.
$image = new Imagick($filepath);
생성한 Imagick 객체는 이미지를 조작하고 저장하는 메서드를 가지고 있다.
- thumbnailImage() : 이미지 크기 조절
- cropThumbnailImage() :이미지 자르기 및 크기 조절
- writeImage() : 이미지 저장
다음의 구문은 다음에 대해 사용한다.
- 인수로 지정된 파일이 있는 디렉터리의 경로를 반환하는 PHP의 dirname() 함수
- 현재 실행 중인 파일의 경로를 가지고 있는 __FILE__ 상수
- PHP 파일을 실행하는 데 사용되는 운영체제를 기준으로 올바른 디렉터리 구분자를 저장하고 있는 DIRECTORY_SEPARATOR 상수
$upload_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR;
출처 - 존 두켓, <백엔드 프로그래밍을 위한 PHP & MySQL>, Jpub, 2022