이미지 Image Manipulation Class

CodeIgniter의 이미지 처리 클래스 는 다음 기능을 제공합니다:

  • 이미지 크기 변경 Image Resizing
  • 썸네일 생성 Thumbnail Creation
  • 이미지 자르기Image Cropping
  • 이미지 회전 Image Rotating
  • 이미지 워터마크 Image Watermarking

3개의 주요 이미지 라이브러리는 다음 라이브러리가 필요합니다: GD/GD2, NetPBM, 그리고 ImageMagick

Note

워터마크는 GD/GD2 라이브러리가 사용 가능해야 합니다. 그리고,다른 라이브러리들이 있더라도, 이미지 속성정보를 계산하기 위해 GD 는 기본으로 필요합니다. 그러나 이미지 처리는 여러분이 정의한 라이브러리를 가지고 수행할 수 있습니다.

클래스 초기화 Initializing the Class

다른 클래스들과 같이, 이미지 클래스또한 $this->load->library 함수로 초기화 합니다:

$this->load->library('image_lib');

일단 초기화하면 바로 사용하실 수 있습니다. 이미지 라이브러리 객체는 다음과 같이 사용합니다 $this->image_lib

이미지 처리 Processing an Image

이미지를 어떻게 처리하고자 하든지 (예를 들어 크기조절,자르기,돌리기,워터마크),일반적인 사용법은 동일합니다. 어떤 처리를 할 것인지에 따라서 약간의 속성을 설정한 후, 사용 가능한 처리 함수를 호출하면 됩니다. 예를 들어, 썸네일을 만들고자한다면 아래와 같이 합니다:

$config['image_library'] = 'gd2';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width']         = 75;
$config['height']       = 50;

$this->load->library('image_lib', $config);

$this->image_lib->resize();

위 코드를 보면 image_resize 함수는 source_image 폴더에 있는 mypic.jpg 이미지를 찾은후 GD2 이미지 라이브러리 를 사용하여 75 X 50 사이즈의 썸네일을 생성합니다.maintain_ratio 옵션이 켜져 있으므로, 썸네일은 원본의 가로세로 비율을 유지하면서 지정한 너비 와 높이 에 최대한 가깝게 생성될것입니다.썸네일은 mypic_thumb.jpg 라는 이름으로 생성됩니다. 그리고 source_image와 같은 레벨에 위치합니다.

Note

이미지 처리가 정상적으로 진행되기 위해서는 이미지가 들어있는 폴더에 쓰기권한이 있어야 합니다.

Note

때에 따라서 이미지 처리가 서버메모리를 매우많이 사용할 수도 있습니다. out of memory 에러가 발생했다면, 메모리 최대크기를 제한하시기 바랍니다. PHP에서 사용할 수 있는 최대 메모리 설정도 같이 하시면 좋습니다.

처리 함수들 Processing Methods

처리함수는 4개가 있습니다:

  • $this->image_lib->resize()
  • $this->image_lib->crop()
  • $this->image_lib->rotate()
  • $this->image_lib->watermark()

함수들은 처리성공시 TRUE 를 실패시 FALSE를 리턴합니다. 만약 실패하면 아래 함수를 이용하여 에러 메세지를 출력할 수 있습니다:

echo $this->image_lib->display_errors();

아래와 같이 조건문안에서 이미지를 처리하고 에러가 있을 때만 에러 메세지를 출력하도록 하면 좋습니다:

if ( ! $this->image_lib->resize())
{
        echo $this->image_lib->display_errors();
}

Note

아래와 같이 에러 메세지의 시작부분과 끝부분에 원하는 html 코드를 추가하시면 보다 보기좋게 꾸밀수 있습니다:

$this->image_lib->display_errors('<p>', '</p>');

속성 Preferences

아래 설명되어있는 속성들을통해서 이미지를원하는대로 재단 할 수 있습니다.

아래 속성들을 모든 이미지 처리함수에서 사용할 수는 없습니다. 예를 들어, x/y 축(axis) 속성은 이미지 자르기에서만 사용 가능 합니다. 그리고, 너비(width) 와 높이(height) 속성은 자르기에서 아무런 소용이 없습니다. "지원함수(availability)" 칼럼에서 어떤 함수에 사용 가능한지 표시해 줍니다.

지원함수 범례:

  • R - 이미지 크기 조절 Image Resizing
  • C - 자르기 Image Cropping
  • X - 회전 Image Rotation
  • W - 워터마크 Image Watermarking
설정 기본값 옵션 설명 사용 가능성
image_library GD2 GD, GD2, ImageMagick, NetPBM 이미지 라이브러리를 사용 가능하도록 세팅합니다. R, C, X, W
library_path None None ImageMagick 이나 NetPBM 라이브러리의 서버경로(path)를 설정합니다. 둘중 어떤 라이브러리를 사용하더라도, 경로를 설정해야 합니다. R, C, X R, C, S, W
source_image None None 소스이미지의 경로/이름을 설정합니다. 경로는 URL이 아니라 절대경로나 혹은 상대경로로 설정합니다.  
dynamic_output FALSE TRUE/FALSE (boolean) 이미지 파일이 동적으로 생성될지, 디스크에 저장될지를 결정합니다. 참고: 동적생성으로 설정할 경우 한 번에 하나의 이미지만 보여집니다 그리고, 페이지내에서 위치를 설정할 수 없습니다.단지 이미지 헤더와 함께 동적으로 브라우저에 출력됩니다. R, C, X, W
file_permissions 0644 (integer) 이미지 파일을 적용하기 위한 파일 시스템 권한 R, C, X, W
quality 90% 1 - 100% 이미지의 품질을 설정합니다. 고품질일 수록 파일의 크기는 커집니다. R, C, X, W
new_image None None 이미지의 출력경로(destination)를 설정합니다. 이미지의 복사복을 생성할 때 이 속성을 이용할 수 있습니다. 경로는 URL이 아니라 절대경로나 혹은 상대경로로 설정합니다. R, C, X, W
width None None 원하는 이미지의 너비를 설정합니다. R, C
height None None 원하는 이미지의 높이를 설정합니다. R, C
create_thumb FALSE TRUE/FALSE (boolean) 이미지 처리함수에 썸네일을 생성할 것이라고 지정합니다. R
thumb_marker _thumb None 썸네일지시자를 명시합니다.지시자는 파일 확장자 바로 앞에삽입됩니다. 예를 들어 mypic.jpg 는 mypic_thumb.jpg 이 될것입니다 R
maintain_ratio TRUE TRUE/FALSE (boolean) 원본이미지의 가로세로비율을 유지할지 혹은 입력된 수치대로 이미지 크기조절을 수행할지를 결정합니다. R, C
master_dim auto auto, width, height 크기조절이나, 썸네일 생성시 어느축을 주축으로 할지를 정의합니다. 예를 들어, 어떤 이미지를 100 X 75 로 리사이징 한다고할 때, 이미지 원본의 비율이 이와달라서 완벽하게 처리될 수 없다면 이 설정은 너비나 높이중 어느쪽을 중심으로 처리할 것인지를 지정합니다. "auto" 는 이미지가 넓은 형태인지 높은 형태인지를 가지고 자동으로 주축을 결정합니다. R
rotation_angle None 90, 180, 270, vrt, hor 이미지를 회전할 때 몇도로 회전할지를 결정합니다. PHP 는 시계반대방향으로 회전시키므로, 90도를 회전시키고자한다면 270 을 지정하셔야 합니다. X
x_axis None None 이미지를 자를때 X 좌표를 픽셀단위로 설정합니다. 예를 들어, 30을 설정하면 왼쪽으로부터 30픽셀만큼 잘라냅니다. C
y_axis None None 이미지를 자를때 Y 좌표를 픽셀단위로 설정합니다. 예를 들어, 30을 설정하면 위쪽으로부터 30픽셀만큼 잘라냅니다. C

속성을 설정파일에 저장하기 Setting preferences in a config file

속성을 위와 같이 설정하는대신에 설정파일에 저장하고 싶다면 image_lib.php라는 이름으로 새파일을 만드신후 $config 배열을 그 안에 추가하시기 바랍니다. 그런다음 파일을 config/image_lib.php 로 저장하시면 자동으로 설정이 로드됩니다. 설정파일에 저장하시면 $this->image_lib->initialize() 함수를 호출할필요가 없습니다.

워터마크 Image Watermarking

워터마크를 사용하려면 GD/GD2 라이브러리가 필요합니다.

두 개 타입의 워터마크 Two Types of Watermarking

사용 가능한 워터마크는 아래와 같이 2개의 타입이 있습니다:

  • 텍스트 Text:텍스트를 사용하여 워터마크를 생성합니다. 트루타입폰트를 지정하여 사용할 수도 있고, GD 라이브러리에서 지원하는 네이티브 텍스트를 사용할 수도 있습니다. 트루타입을 사용하시려면 GD 는 트루타입지원(True Type support)으로 컴파일 되어 설치되어야 합니다 (대부분은 그러하나, 그렇지않은경우도 있습니다).
  • 오버레이 Overlay: 이미지 오버레이를 사용하여 워터마크를 생성합니다. 일반적으로 투명 PNG 나 GIF 를 사용합니다.

이미지에 워터마크 하기 Watermarking an Image

다른 함수들과 마찬가지로 (크기변환, 자르기, 회전) 워터마크도 필요한 속성을 설정하고 워터마크 함수를 호출하면 됩니다. 아래 예제를 참고하세요:

$config['source_image'] = '/path/to/image/mypic.jpg';
$config['wm_text'] = 'Copyright 2006 - John Doe';
$config['wm_type'] = 'text';
$config['wm_font_path'] = './system/fonts/texb.ttf';
$config['wm_font_size'] = '16';
$config['wm_font_color'] = 'ffffff';
$config['wm_vrt_alignment'] = 'bottom';
$config['wm_hor_alignment'] = 'center';
$config['wm_padding'] = '20';

$this->image_lib->initialize($config);

$this->image_lib->watermark();

위 예제에서는 “Copyright 2006 - John Doe” 라는 글자를 가지고 16픽셀 트루타입폰트로 워터마크를 생성합니다. 워터마크는 이미지의 하단 가운데 위치하며, 바닥에서부터 20픽셀위치에 있게 됩니다.

Note

이미지 클래스를 사용하기 위해서는 이미지파일에 쓰기권한이 설정되어있어야 합니다. 예를 들어 777 등으로 설정해주세요..

워터마크 속성 Watermarking Preferences

아래 테이블은 텍스트나 오버레이 워터마크에 사용할 수 있는 속성을 보여줍니다.

설정 기본값 옵션 설명
wm_type text text, overlay 워터마크 타입을 설정합니다.
source_image None None 소스이미지의 경로와 파일이름을 설정합니다. 경로는 URL 이 아니라 절대경로나 상대경로로 설정해야 합니다.
dynamic_output FALSE TRUE/FALSE (boolean) 이미지 파일이 동적으로 생성될지, 디스크에 저장될지를 결정합니다. 참고: 동적생성으로 설정할 경우 한 번에 하나의 이미지만 보여집니다 그리고, 페이지내에서 위치를 설정할 수 없습니다.단지 이미지 헤더와 함께 동적으로 브라우저에 출력됩니다.
quality 90% 1 - 100% 이미지의 품질을 설정합니다. 고품질일 수록 파일의 크기는 커집니다.
wm_padding None A number 워터마크가 이미지의 경계로부터 기본적으로 얼마나 떨어질지에 대한 패딩(padding) 을 픽셀로 설정합니다. (html 테이블에서 padding 설정하는 것과 같은개념).
wm_vrt_alignment bottom top, middle, bottom 워터마크이미지의 세로 정렬을 설정합니다
wm_hor_alignment center left, center, right 워터마크이미지의 가로 정렬을 설정합니다
wm_hor_offset None None 워터마크 이미지의 가로 위치를 픽셀로 설정합니다. 통상 오프셋을 설정하면 워터마크는 설정값 만큼 오른쪽으로 이동하게 됩니다. 그러나 alignment를 right 로 설장하면 왼쪽으로 이동합니다.
wm_vrt_offset None None 워터마크 이미지의 세로 위치를 픽셀로 설정합니다. 통상 오프셋을 설정하면 워터마크는 설정값 만큼 아래로 이동하게 됩니다. 그러나 alignment를 bottom으로 설장하면 위쪽으로 이동합니다.

텍스트 속성 Text Preferences

아래테이블은 워터마크가 텍스트 타입일때 사용할 수 있는 속성입니다.

설정 기본값 옵션 설명
wm_text None None 워터마크로 사용할 텍스트를 설정합니다. 일반적으로는 저작권(copyright)관련 텍스트를 쓰겠지요.
wm_font_path None None 사용할 트루타입폰트의 서버경로를 설정합니다. 이 옵션을 설정하지 않으시면 GD에 내장된 폰트가 사용됩니다.
wm_font_size 16 None 폰트크기입니다. 참고: 위의 트루타입 옵션을 사용하지 않으면, 숫자는1 - 5 까지 설정할 수 있습니다. 그렇지않다면, 사용하는 폰트에 대해 가능한 크기를 모두 사용할 수 있습니다(픽셀단위로 설정).
wm_font_color ffffff None 폰트색상을 16진수로 설정합니다. 참고, 3글자의 축소버전(예 fff) 컬러설정대신 반드시 6 글자의 16진수값을 모두 사용해야 합니다(예, 993300).
wm_shadow_color None None 그림자의 색상을 16진수로 설정합니다. 이설정을 사용하지 않으면 그림자는 생성되지 않습니다. 참고, 3글자의 축소버전(예 fff) 컬러설정대신 반드시 6 글자의 16진수값을 모두 사용해야 합니다(예, 993300).
wm_shadow_distance 3 None 그림자가 얼마나 떨어져서 표시될지를 픽셀단위로 지정합니다.

오버레이 속성 Overlay Preferences

아래테이블은 워터마크가 오버레이 타입일때 사용할 수 있는 속성입니다.

설정 기본값 옵션 설명
wm_overlay_path None None 워터마크로 사용할 이미지의 서버경로를 설정합니다. 오버레이타입의 워터마크 생성시에만 필요합니다.
wm_opacity 50 1 - 100 이미지 투명도를 설정합니다. 이 설정을 통해서 원본이미지위체 반투명으로 워터마크를 생성할 수 있습니다. 일반적으로 50% 로 설정합니다.
wm_x_transp 4 A number 워터마크 이미지로 PNG 혹은GIF를 사용한다면, 어떤 색깔을 투명으로할지 설정해야할 것입니다. 이 속성을 통해 설정할 수 있습니다. 이 속성과 아래 속성을 함께 사용하여 좌표를 지정하면 왼쪽 위를 0으로 하여 지정한 픽셀만큼의 위치에 있는색깔과 같은 색깔을 투명으로 설정합니다.
wm_y_transp 4 A number 위 설정과 함께, 투명하게 할색상의 위치를 표현하는데 쓰입니다.

클래스 레퍼런스 Class Reference

class CI_Image_lib
initialize([$props = array()])
인수:
  • $props (array) – Image processing preferences
반환값:

TRUE on success, FALSE in case of invalid settings

반환형:

bool

이미지를 처리하기위한 클래스를 초기화.

resize()
반환값:TRUE on success, FALSE on failure
반환형:bool

이미지 리사이징 함수를 사용하여 원본 이미지의 크기를 조정할 수 있습니다. 복사본 (크기 조정 또는 크기 조정없이), 또는 썸네일 이미지를 만들 수 있습니다.

실제적으로, 사본을 생성하는 것과 썸네일을 생성하는 것은 차이가 없습니다. 단 썸네일을 생성하는 것은 이름의 일부분에 썸네일이라는 명칭이 붙습니다. (즉, mypic_thumb.jpg)

Preferences 테이블에 나열된 모든 설정은 이 목적을 위해 사용됩니다. 단 3가지 제외 : : rotation_angle, x_axis and y_axis.

썸네일 생성 Creating a Thumbnail

아래의 값을 TRUE 로 설정하면, 리사이징 함수는 썸네일 파일을 만들 것입니다. (그리고 원본을 보존합니다). :

$config['create_thumb'] = TRUE;

이 하나의 설정값이 썸네일을 생성할지 말지를 결정합니다.

복사본 생성 Creating a Copy

아래의 변수를 이용하여 path 와 파일명을 설정하면, 리사이징 함수는 이미지 파일의 복사본을 생성할 것입니다. (그리고 원본은 보존합니다):

$config['new_image'] = '/path/to/new_image.jpg';

이 설정의 주의사항 Notes regarding this preference:

  • 만약 새로운 파일의 이름만 지정이 되면, 원본과 같은 디렉토리에 저장됩니다.
  • 만약에 경로가 지정이 되면, 새로운 이미지는 원본과 같은 파일명으로 새로운 경로에 저장될 것입니다.
  • 만약에 경로와 파일명이 둘 다 지정이 되면, 주어진 경로와 파일명에 저장됩니다.

원본 이미지의 리사이징 Resizing the Original Image

위에 나열된 2개의 값(create_thumb, new_image)을 설정하지 않으면, 리사이징 함수는 원본 이미지를 대상으로 진행합니다.

crop()
반환값:TRUE on success, FALSE on failure
반환형:bool

크롭 함수는 크롭할 위치의 X축과 Y축의 값을 픽셀로 설정하는 것만 제외하면 리사이징 함수와 거의 비슷합니다. 다음과 같습니다:

$config['x_axis'] = 100;
$config['y_axis'] = 40;

Preferences 테이블에 나열된 모든 설정값은 이것을 위해 존재합니다. 단 다음은 제외: rotation_angle, create_thumb, new_image.

다음 예제는 어떻게 크롭을 하는지 보여줍니다:

$config['image_library'] = 'imagemagick';
$config['library_path'] = '/usr/X11R6/bin/';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['x_axis'] = 100;
$config['y_axis'] = 60;

$this->image_lib->initialize($config);

if ( ! $this->image_lib->crop())
{
        echo $this->image_lib->display_errors();
}

Note

Without a visual interface it is difficult to crop images, so this method is not very useful unless you intend to build such an interface. That’s exactly what we did using for the photo gallery module in ExpressionEngine, the CMS we develop. We added a JavaScript UI that lets the cropping area be selected.

rotate()
반환값:TRUE on success, FALSE on failure
반환형:bool

이미지 회전 함수는 회전 각도가 다음 설정을 통해 세팅되어야 합니다:

$config['rotation_angle'] = '90';

5개의 로테이션 옵션이 있습니다:

  1. 90 - 시계반대방향으로 90도 회전.
  2. 180 - 시계반대방향으로 180도 회전.
  3. 270 - 시계반대방향으로 270도 회전.
  4. hor - 이미지를 좌우로 뒤집기.
  5. vrt - 이미지를 상하로 뒤집기.

어떻게 이미지를 회전하는지 보여주는 예제가 있습니다:

$config['image_library'] = 'netpbm';
$config['library_path'] = '/usr/bin/';
$config['source_image'] = '/path/to/image/mypic.jpg';
$config['rotation_angle'] = 'hor';

$this->image_lib->initialize($config);

if ( ! $this->image_lib->rotate())
{
        echo $this->image_lib->display_errors();
}
watermark()
반환값:TRUE on success, FALSE on failure
반환형:bool

이미지 위에 워터마크를 생성합니다. 더 많은 정보를 위해서는 이미지 워터마크 (Watermarking an Image) 페이지를 참조하세요.

clear()
반환형:void

clear 함수는 이미지 작업시 사용했던 모든 값을 리셋합니다. 반복문 안에서 이미지 작업을 할 때 사용할 수 있습니다.

$this->image_lib->clear();
display_errors([$open = '<p>[, $close = '</p>']])
인수:
  • $open (string) – Error message opening tag
  • $close (string) – Error message closing tag
반환값:

Error messages

반환형:

문자열

모든 발견된 에러를 문자형으로 반환.

echo $this->image_lib->display_errors();