PHP를 이용하여 워터마크를 만들어보자 - php 이미지 폰트 변경 php 워터마크 소스
로빈아빠
본문
여기서 소개하는 PHP용 워터마크 처리 소스는 이미지에 텍스트를 추가하는 방식으로 워터마크를 구현합니다. 이미지를 사용한 워터마크보다 수준이 떨어지는 기술이지만 텍스트를 추가하는 것만으로도 워터마크 기능을 충실히 할 수 있다고 저는 생각합니다.
먼저 PHP 소스를 보도록 하겠습니다.
- class Image {
- function impressWaterMark($type,$image,$string = null) {
- $type = strtolower($type);
- switch($type) {
- case 'gif':
- $output = imagecreatefromgif($image);
- $image_org = imagecreatefromgif($image);
- break;
- case 'jpg':
- case 'jpeg':
- $output = imagecreatefromjpeg($image);
- $image_org = imagecreatefromjpeg($image);
- break;
- case 'png':
- $output = imagecreatefrompng($image);
- $image_org = imagecreatefrompng($image);
- break;
- }
- if($string === null) {
- switch($type) {
- case 'gif':
- imagegif($output);
- break;
- case 'jpg':
- case 'jpeg':
- imagejpeg($output);
- break;
- case 'png':
- imagepng($output);
- break;
- }
- imagedestroy($output);
- imagedestroy($image_org);
- return;
- }
- $font_size = 15;
- $opacity = 30;
- // FONTS 상수는 사용자가 직접 정의해주세요.
- $font_path = FONTS.'watermark.ttf';
- $_font_size = imagettfbbox($font_size,0,$font_path,$string);
- $dx = abs($_font_size[2]-$_font_size[0]);
- $dy = abs($_font_size[5]-$_font_size[3]);
- $xpad = 20;
- $ypad = 20;
- $w = imagesx($output);
- $h = imagesy($output);
- $white = imagecolorallocate($output,255,255,255);
- $black = imagecolorallocate($output,0,0,0);
- imagettftext($output,$font_size,0,(int)($xpad/2)+1,$dy+(int)($ypad/2),$black,$font_path,$string);
- imagettftext($output,$font_size,0,(int)($xpad/2),$dy+(int)($ypad/2)-1,$white,$font_path,$string);
- imagecopymerge($output,$image_org,0,0,0,0,$w,$h,$opacity);
- switch($type) {
- case 'gif':
- imagegif($output);
- break;
- case 'jpg':
- case 'jpeg':
- imagejpeg($output);
- break;
- case 'png':
- imagepng($output);
- break;
- }
- imagedestroy($output);
- imagedestroy($image_org);
- }
- }
위 워터마크 함수는 태터툴즈(텍스트큐브 이전 이름)를 참고하여 제작하였습니다.
위 함수는 Image 클래스에 포함되어 다른 함수와의 중복을 처음부터 방지하며 관리를 쉽도록 하였습니다.
사용법은 Image::impressWaterMark([이미지 타입],[파일 경로],[표시 문자열]);입니다.
위의 함수를 사용하면 따로 이미지를 출력할 필요가 없이 바로 워터마크 처리된 이미지를 출력해 줍니다.
그렇기 때문에 이미지 출력 페이지를 따로 만들거나 다운로드 페이지에서 이 함수를 호출하면 바로 이미지를 출력할 수 있습니다.
사용 예) Image::impressWaterMark('jpeg','/files/0/testImage','Beneglo');
※ 위 소스에서 FONTS는 폰트 파일 경로를 지정하는 상수입니다. FONTS는 제가 지정한 상수이므로 사용할때는 수정해주세요.
관련링크
댓글목록
등록된 댓글이 없습니다.