PHP 함수중에 이미지 처리하는 함수를 알아보겠습니다.

개발중에 이미지 처리하는 부분도 상당히 중요한 것 같습니다.

나름대로 정리를 했는데 잘 되었는지 모르겠습니다.


PHP 이미지 함수 정리(매뉴얼 참조)

resource imagecreate(int $width, int $height) : 인자값으로 받은 사이즈로 빈 이미지를 생성한다.
인자값 : width(가로), height(세로)

int imagecolorallocate( resource $image , int $red , int $green , int $blue ) : 주어진 이미지에 사용될 RGB값을 지정한다.
인자값 : image(imagecreate로 생성된 이미지), red(0~255), green(0~255), blue(0~255)

int imagecolortransparent ( resource $image [, int $color ] ) : 주어진 이미지에 투명 색상을 지정한다.
인자값 : image(imagecreate로 생성된 이미지), color(imagecolorallocate 등의 함수로 생성된 칼라 값)

bool imagefill ( resource $image , int $x , int $y , int $color ) : 주어진 좌표위치부터 주어진 색상으로 주어진 이미지를 채운다.
인자값 : image(imagecreate로 생성된 이미지), x(이미지의 x좌표), y(이미지의 y좌표), color(imagecolorallocate 등의 함수로 생성된 칼라 값)

resource imagecreatefromgif ( string $filename ) : 주어진 gif파일 경로 혹은 URL로부터 새로운 이미지를 생성한다.
인자값 : filename(gif 파일경로 혹은 gif url경로)

bool imagecopy ( resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h ) : 이미지를 복사한다.
인자값 : dst_im(생성하고자 하는 이미지), src_im(카피할 이미지), dst_x(생성하고자 하는 x위치), dst_y(생성하고자 하는 y위치), src_x(카피이미지 x위치), src_y(카피이미지 y위치), src_w(카피이미지 가로길이), src_h(카피이미지 세로길이)

int imageinterlace ( resource $image [, int $interlace = 0 ] ) : 주어진 이미지에 라인, arc등의 삽입여부를 설정한다.
인자값 : image(imagecreate로 생성된 이미지), interlace(삽입여부->0 : 삽입안함, 1 : 삽입)

bool imagejpeg ( resource $image [, string $filename [, int $quality ]] ) : jpeg파일로 저장한다.
인자값 : image(imagecreate로 생성된 이미지), filename(jpeg로 저장될 전체경로, 지정안할시 바로 보여줌), quality(설정안할시 75%정도임)

bool imagedestroy ( resource $image ) : 생성된 이미지 객체를 메모리에서 해제한다.
인자값 : image(imagecreate로 생성된 이미지)



작은 이미지(30X30) 2개를 한개의 이미지로 합치는 예제

--------------test.php--------------------------------------------------------

<img src="./img_copy.php" width="60" height="60" />    //이미지를 합치는 페이지 설정

 

 

--------------img_copy.php------------------------------------------------------

<?php

//헤더선언
header("Expires: Mon, 26 Jul 1997 05:00:00 /GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-type: image/jpg");


$img1="./images/img1.gif;                             //30X30이미지(카피하고자 하는 이미지1)
$img2="./images/img2.gif;                             //30X30이미지(카피하고자 하는 이미지2)

$dst_img = ImageCreate(60, 60);                       //두개의 이미지를 카피할 수 있는 영역의 이미지 생성
$gray=ImageColorAllocate($dst_img,234,234,234);       //색상지정
$white=ImageColorAllocate($dst_img,255,255,255);      //색상지정

ImageColorTransparent($dst_img,$white);               //투명색 지정

ImageFill($dst_img, 0, 0, $white);                   

$src_img1 = ImageCreateFromGIF($img1);
$src_img2 = ImageCreateFromGIF($img2);

ImageCopy($dst_img,$src_img1,0,0,0,0,30,30);           //이미지 카피
ImageCopy($dst_img,$src_img2,30,0,0,0,30,30);          //이미지 카피

ImageInterlace($dst_img, 0);

ImageJPEG($dst_img);           //JPG 이미지로 표출됨
ImageDestroy($dst_img);                                //메모리 해제

?>
 

PHP+MySQL 웹 개발 마스터 북:로그인부터 회원 관리까지 쉽게 배우는 PHP와 MySQL

COUPANG

www.coupang.com

 

위와 같은 식으로 구현하면 test.php에서 합쳐진 이미지가 보이게 됩니다.

많은 도움이 되었으면 합니다.


글 작성 배경:갤러리 화면 구성 중 이미지 저장하는 부분이 필요하게 됨

알아두어야 할 내용:$_FILES[][]
 - HTML 폼에서 <input type="file" id="userfile" .....>를 사용한 파일에 대한 정보를 가지고 있음
 - register_globals(php.ini 파일에 들어있는 변수값)가 off일때 꼭 사용해야 함
 - $_FILES['userfile']['tmp_name'] - 웹 서버에 임시로 저장된 파일의 위치.
 $_FILES['userfile']['name'] - 사용자 시스템에 있을 때의 파일 이름.
 $_FILES['userfile']['size'] - 파일의 바이트 크기.
 $_FILES['userfile']['type'] - 파일의 MIME 타입을 가리킴. (예:text/plain이나 image/gif 등)
 $_FILES['userfile']['error'] - 파일 업로드할 때 일어난 오류 코드를 알려줌



예제
input.php(입력폼)
---------------------------------------------------------------------------------------
<form method="post" enctype="multipart/form-data" action="save.php">
........
<div id="pimage"><p>이미지:<input type="file" name="uimg" id="textfield" />(이미지사이즈 : 168 X 115)</div>
.........
</form>
---------------------------------------------------------------------------------------

save.php(저장폼)
---------------------------------------------------------------------------------------
<?php
 $img_dir = $_SERVER['DOCUMENT_ROOT']."/저장할디렉토리명";           //저장 디렉토리
 $img_tmp = $_FILES['uimg']['tmp_name'];             //임시 파일명
 $img_type = $_FILES['uimg']['type'];             //저장가능 이미지 타입
 $img_name = $_FILES['uimg']['name'];             //파일명(ex : xxxx.jpg)

 $filename = explode(".",$img_name);              //파일명 및 확장자를 분리한 배열
 $extension = strtoupper($filename[sizeof($filename)-1]);        //확장자 추출
//타임 및 난수를 이용해서 기존 파일명 대신 사용할려고 함
 srand((double)microtime() * 1000000);             //난수만들기(seed 초기화)
 $random = sprintf('%03d',rand(1,999));             //난수만들기
 $up_filename = time()."_".$random.".".strtolower($extension);  //DB저장 파일명       
 $save_name = $img_dir."/".$up_filename;             //copy시 전체경로 및 파일명

 //파일 확장자로 올릴 수 있는 파일 체크함
 if($extension == "JPG" || $extension == "GIF") {
 } else {
  echo("
   <script>
   window.alert('지원 가능하지 않는 파일입니다. \\n이미지를 입력하여 주세요.');
   history.go(-1);
   </script>
  ");
  exit;
 }

 if(copy($img_tmp, $save_name)) {     //파일 업로드
  unlink($img_tmp);        //임시파일삭제
 }
 else {
  unlink($img_tmp);
  echo("
    <script>
    window.alert('파일 저장시 오류가 발생하였습니다.\\n감사합니다.');
    history.go(-1);
    </script>
   ");
  exit;
 }
.....
DB저장부분 삽입
.....
?>
---------------------------------------------------------------------------------------

이상으로 간단한 예제를 적습니다.

공부시에 많은 도움되면 좋겠습니다.


개발중에 가장 유용하게 쓰이는 시간 관련 함수를 정리해 보았습니다.

우선 간단한 예제인데요..개발중에 더 유용한 정보가 올리면 덧붙여서 올리겠습니다.

오늘도 즐거운 하루 되십시오.

1.time함수
  int time(void)
  설명 : 현재 시간을 반환한다.
  반환값 : timestamp로 반환한다.

2. strtotime함수
  int strtotime ( string $time [, int $now = time() ] )
  설명 : string값을 통해 timestamp값으로 반환한다.
  인수 :
  time(date 및 time 포맷)
  now(날짜 계산을 위해 기본적으로 사용되어지는 timestamp)
  반환값 : timestamp로 반환한다.

3. date함수
  string date ( string $format [, int $timestamp ] )
  설명 : 정수형으로 주어지는 timestamp나, timestamp가 주어지지 않았을 경우에는 현재 로컬 시간을 사용하여, 주어진 포맷 문자열에 따라 형식화한 문자열을 반환합니다. 즉 timestamp는 선택적이고, 기본값은 time()의 값입니다.
  인자 :
  format(출력하는 날짜 string의 형식) - 자주 쓰이는 format 정리(매뉴얼 참조)
     d -> 일, 앞에 0이 붙는 2 숫자(01에서 31)
     D -> 요일 글자 표현, 3문자(Mon에서 Sun)
     j -> 앞에 0이 붙지 않는 일(1에서 31)
     l -> 요일의 완전한 글자 표현(Sunday에서 Saturday)
     N -> 요일의 ISO-8601 숫자 표현(1(월요일)에서 7(일요일))
     w -> 요일 숫자 표현(0(일요일)에서 6(토요일))
     W -> ISO-8601 주차, 주는 월요이에 시작(42(그 해의 42번째 주))
     F -> January나 March 같은 월의 완전한 글자 표현(Januray에서 December)
     m -> 0이 붙는 월 숫자 표현(01에서 12)
     M -> 월의 축약 글자 표현, 3문자(Jan에서 Dec)
     n -> 0이 붙지 않는 월 숫자 표현(1에서 12)
     t -> 주어진 월의 일 수(28에서 31)
     L -> 윤년 여부(윤년엔 1, 그 외엔 0)
     Y -> 연도의 완전한 숫자 표현, 4 숫자(1999나 2012)
     y -> 연도의 두 숫자 표현(99나 12)
     a -> 오전과 오후의 소문자(am 또는 pm)
     A -> 오전과 오후의 대문자(AM 또는 PM)
     g -> 0이 붙지 않는 12시간 형식 시(1에서 12)
     G -> 0이 붙지 않는 24시간 형식 시(1에서 24)
     h -> 0이 붙는 12시간 형식 시(01에서 12)
     H -> 0이 붙는 24시간 형식 시(00에서 24)
     i -> 0이 붙는 분(00에서 59)
     s -> 초, 0이 붙음(00에서 59)
  timestamp(선택적인 timestamp 인수는 timestamp가 주어지지 않았을 경우, 현재 로컬 시간을 기본값으로 가지는 integer 유닉스 타임스탬프입니다. 즉, 기본값은 time() 값입니다.)

4. mktime함수
  int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
  설명 : timestamp형태로 만들어준다.
  인자 :
  hour : 시간
  minute : 분
  second : 초
  month : 월
  day : 일
  year : 년도



예시1)날짜 표출

<?php
$nextWeek = time() + (7 * 24 * 60 * 60); // 7 days; 24 hours; 60 mins; 60secs (현재시간에 7일에 해당하는 시간을 더한다)
echo 'Now:       '. date('Y-m-d') ."\n";
echo 'Next Week: '. date('Y-m-d', $nextWeek) ."\n";
// or using strtotime():
echo 'Next Week: '. date('Y-m-d', strtotime('+1 week')) ."\n";
?>

결과값 :
Now:        2012-02-06
Next Week : 2012-02-13
Next Week : 2012-02-13

 

예시2)날짜 표출

<?php
$recentdate= mktime(0,0,0,2,6,2012); //오늘날짜

$year=date('Y',$recentdate);
$month=date('m',$recentdate);
$day=date('d',$recentdate);

echo 'Now:       '.$year."월 ".$month."일 ".$day."일"."\n";
?>

결과값:
Now:        2012-02-06

 

예시3)strtotime 함수 사용

<?php
echo 'Now:       '.date('Y-m-d', strtotime("now"))."\n";
echo '날짜:      '.date('Y-m-d', strtotime("10 September 2000"))."\n";
echo '날짜:      '.date('Y-m-d', strtotime("+1 day"))."\n";
echo '날짜:      '.date('Y-m-d', strtotime("+1 week"))."\n";
echo '날짜:      '.date('Y-m-d', strtotime("+1 week 2 days"))."\n";
echo '날짜:      '.date('Y-m-d', strtotime("next Thursday"))."\n";
echo '날짜:      '.date('Y-m-d', strtotime("last Monday"))."\n";
?>

결과값
Now:        2012-02-06
날짜:       2000-09-10
날짜:       2012-02-17
날짜:       2012-02-13
날짜:       2012-02-15
날짜:       2012-02-16
날짜:       2012-01-30
 

러닝 PHP : PHP 입문에서 프레임워크를 활용한 실전 프로그래밍까지(PHP 7 기반)

COUPANG

www.coupang.com

 

+ Recent posts