이미지 & 파일(3)

minah moon·2023년 8월 17일

PHP

목록 보기
30/58
post-thumbnail

확장 프로그램을 사용하여 이미지 편집하기

확장 프로그램은 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로 크기 조절하고 자르기

Imagick PHP 확장 프로그램을 사용하면 PHP 코드로 ImageMagick이라는 오픈소스 이미지 편집 소프트웨어를 제거할 수 있다. Imagick 확장 프로그램은

  • GD보다 훨씬 적은 코드가 사용된다.
  • 이미지 크기를 조절하기 위해 비율과 크기를 계산한다(코드에서 따로 계산할 필요가 없다).
  • 모든 이미지 포맷에 대해 동일한 메서드를 사용한다.
  • GD보다 더 많은 이미지 포맷을 지원한다.

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

0개의 댓글