커뮤니티

고용노동부, 산업인력공단과 함께하는 강원도 유일한 기업중심 IT전문교육기관 ICT융합캠퍼스만의 특별한교육입니다.
공인 IT숙련기술인의 다양한 접근방법으로 전문가다운 실무교육을 받을 수 있습니다.

Category

교육강좌

언어 PHP - 이미지 다루기

페이지 정보

작성자 관리자 댓글 0건 조회 6,728회 작성일 20-06-10 13:34

본문

이미지 다루기

PHP를 이용해서 이미지를 프로그래밍적으로 생성하고 변경할 수 있다.

GD

이미지처리 작업은 PHP의 기본적인 기능에는 포함되어 있지 않다. 대신 라이브러리나 외부 프로그램과 연동을 해야 하는데 GD라이브러리가 가장 많이 사용된다.

GD의 설치

GD는 기본적으로 사용할 수 있도록 활성화 되어 있는 경우도 있고, 그렇지 않은 경우도 있다. 시스템의 현재 상황을 파악할 수 있는 방법은 phpinfo()를 실행해 보는 것이다. 아래 코드를 실행해보자.

1
2
3
<?php
phpinfo();
?>

출력 내용 중에서 특히 중요한 부분은 아래와 같다.

만약 gd가 보이지 않는다면 이를 활성화하거나 설치해야 한다.

php.ini 파일을 열어보고 아래와 같은 부분이 있는지 확인해보자. 만약 아래와 같다면 주석 ;를 제거해준다.

1
;extension=php_gd2.dll

윈도우 버전 Bitnami 사용자

윈도우 버전 bitnami를 사용하고 있다면 php.ini 파일에서 extension_dir 지시자의 값을 아래와 같이 변경해준다. 아래의 설정은 필자의 설정이기 때문에 자신에게 맞는 설정은 직접해주어야 한다.

1
extension_dir = "D:\BitNami\wampstack-5.4.21-0\php\ext"

리눅스

우분투처럼 apt-get을 사용할 수 있다면 아래와 같은 명령으로 gd를 설치 할 수 있다.

1
sudo apt-get install php5-gd;

예제

 

아래의 예제를 실행하기 위해서는 button.php과 같은 디렉토리에 button.png 파일이 존재해야 한다. 편의를 위해서 다음 이미지를 사용하자.

아래와 같이 접근하면 coding이라는 텍스트가 버튼에 표시될 것이다.

코드는 아래와 같다.

1
2
3
4
5
6
7
8
9
10
<?php
header("Content-type: image/png");
$string = $_GET['text'];
$im = imagecreatefrompng("button.png");
$orange = imagecolorallocate($im, 60, 87, 156);
$px = (imagesx($im) - 7.5 * strlen($string)) / 2;
imagestring($im, 4, $px, 9, $string, $orange);
imagepng($im);
imagedestroy($im);
?>

아래의 예제는 위의 예제를 이용해서 버튼을 실시간으로 생성해주는 예제다.

1
2
3
4
5
6
7
8
<html>
<body>
<img src="button.php?text=intro" />
<img src="button.php?text=member" />
<img src="button.php?text=history" />
<img src="button.php?text=mission" />
</body>
</html>

실행결과는 아래와 같다.

예제2. 워터마크

 

이미지에 워터마크를 찍어보자. 아래에 3장의 이미지가 있다.

text.png

text.png

original.png

original.png

result.png

result.png

text.png를 original.png에 그려서 result.png를 만드는 것이 이번 예제의 목표다. 이를 위해서 text.png와 original.png를 /image 디렉토리에 복사해서 위치시키자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
// Load the stamp and the photo to apply the watermark to
$stamp = imagecreatefrompng('text.png');
$im = imagecreatefrompng('original.png');
// Set the margins for the stamp and get the height/width of the stamp image
$marge_right = 10;
$marge_bottom = 10;
$sx = imagesx($stamp);
$sy = imagesy($stamp);
// Copy the stamp image onto our photo using the margin offsets and the photo
// width to calculate positioning of the stamp.
imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
// Output and free memory
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기

답변목록

등록된 답변이 없습니다.