특정 이미지를 사용하여 동일한 형태의 사이즈가 각각 다른 이미지들을 만들때가 있습니다. 언제 그럴까요?

1. 썸네일(Thumbnail) 이미지가 필요한 경우
2. 사이트에 필요한 이미지로 리사이징(resizing) 해야하는 경우

위와 같은 경우에 다수의 이미지를 사이즈별로 이미지 편집 프로그램(포토샵 등등)을 이용해 모두 등록하는 방법도 있겠지만 어짜피 같은 이미지의 사이즈만 다른 것이라면 매우 번거로울 것입니다. 그래서 한번만 등록해도 다른 사이즈가 자동으로 등록되는 방법을 사용하는 것이 효과적입니다.

php는 이미지를 생성하는 다양한 함수가 존재합니다. 하지만 각각의 내장함수를 이용하면 코드가 길어지고 가독성이 떨어지는 등 매우 지저분한 코드가 만들어질 수 있으므로 가급적 사용자함수를 만들어서 사용하는 것이 베스트라고 할 수 있죠... 그럼 사용자 함수는 어떻게 만들어야할까요?

아래는 각각의 이미지 타입에 대한 사용자 함수 만들기 소스코드 예제입니다.



# JPG 이미지 만드는 함수
<?php
// $img - 함수에 사용될 이미지
// $filename - 생성될 파일에 사용할 이름

$img = imagecreatefromjpeg($_FILES['addfile']['tmp_name'][$key]);

function createJpg($size, $filename) {
   global $width, $height, $img;
   $tmpCreation = imagecreatetruecolor($size, $height*$size/$width);
   imagecopyresampled($tmpCreation, $img, 0, 0, 0, 0, $size, $height*$size/$width, $width, $height);
   imagejpeg($tmpCreation, $filename, 100);

//Destroy image
   destroy($tmpCreation);
}
?>


# PNG 이미지 만드는 함수
<?php
// $img - 함수에 사용될 이미지
// $filename - 생성될 파일에 사용할 이름

$img = imagecreatefrompng($_FILES['addfile']['tmp_name'][$key]);

function createPng($size, $filename) {
   global $width, $height, $img;
   $tmpCreation = imagecreatetruecolor($size, $height*$size/$width);
   imagecolortransparent($tmpCreation, imagecolorallocatealpha($tmpCreation, 0, 0, 0, 127));
   imagealphablending($tmpCreation, false);
   imagesavealpha($tmpCreation, true);
   imagecopyresampled($tmpCreation, $img, 0, 0, 0, 0, $size, $height*$size/$width, $width, $height);
   imagepng($tmpCreation, $filename, 0);

//Destroy image
   destroy($tmpCreation);
}
?>


# GIF 이미지 만드는 함수
<?php
// $img - 함수에 사용될 이미지
// $filename - 생성될 파일에 사용할 이름

$img = imagecreatefromgif($_FILES['addfile']['tmp_name'][$key]);

function createGif($size, $filename) {
   global $width, $height, $img;

   $tmpCreation = imagecreatetruecolor($size, $height*$size/$width);
   imagecolortransparent($tmpCreation, imagecolorallocatealpha($tmpCreation, 0, 0, 0, 127));
   imagealphablending($tmpCreation, false);
   imagesavealpha($tmpCreation, true);
   imagecopyresampled($tmpCreation, $img, 0, 0, 0, 0, $size, $height*$size/$width, $width, $height);
   imagegif($tmpCreation, $filename, 100);

//Destroy image
   destroy($tmpCreation);
}
?>