사이트 내 전체검색
PHP
[제로보드] php 소스 워터마크~ 이미지를 업로드할때 워터마크를 새겨보자~
로빈아빠
https://cmd.kr/php/564 URL이 복사되었습니다.

본문

./files/attach/images/138/842246/watermark.gif
이번엔 워터마크 입니다. 지난번에 올렸던 썸네일 만들기 파일을 약간 수정해서 워터마크를 삽입해 봤습니다. 뭐 그리 많은 분들이 필요하실거라 생각되진 않지만.. 이왕 하는김에 워터마크 생성하는법까지 올려보겠습니다. 일단 압축 파일 안의 소스는 지난번 썸네일 생성하기 처럼.... gif 생성 되느거에 따라 두종류로 나눴습니다. 둘중 하나 선택하세요.. 뭘 선택해야 할지 모르시는 분은.. 바로 어제 올렸던.. 썸네일 생성하기편을 잠깐 참고하시길~

일단 워터마크로 쓰실 그림파일을 하나 준비합니다. 지난번과는 달리 배경을 투명하게 하시면 안됩니다. 색깔 구별하실필요도 없습니다. 이 함수는 배경과 색깔이 다른부분만 골라내 원본 이미지에 워터마크를 새깁니다. 그러니 배경을 투명하게 하시면 안되고 단색으로 하시는 편이 낫습니다. 어차피 색깔 구별을 하는게 아니니깐요.. 글구 폰트나 그림은 안티엘러싱을 제거(!!)하고 하시는게 좋습니다. 안그러면 지저분해지구요.. 폰트는 웹폰트쪽이 더 보기 좋더군요.. 암튼 예시로 워터마크 이미지를 집어 넣었습니다. 이 파일을 제로보드의 images 폴더 안에 집어 넣습니다.

다음으로 동봉한 소스를 지난번 썸네일 수정하듯이 수정해 줍니다. 4번째 줄의 절대경로를 수정해 주시구요.. 똑같이 제로보드 폴더에 업로드 합니다. 그리고 나서 write_ok.php 만 수정하시면 됩니다. 일단 맨 윗부분에 다음을 추가해 줍니다.

---------------------------------------------------------

* 공통 파일 include
**************************************************************************/
        include "_head.php";
        include "water.php"; //워터마크인클루드추가

---------------------------------------------------------

다음으로 파일의 맨 끝부분쯤의 '// 글의 갯수를 다시 갱신' 을 찾아 그 위에 다음과 같이 추가해 줍니다.

---------------------------------------------------------

if(eregi(".jpg|.png|.jpeg|.gif|.bmp",$file_name1)) watermark($file_name1,"","images/water.png");
if(eregi(".jpg|.png|.jpeg|.gif|.bmp",$file_name2)) watermark($file_name2,"","images/water.png");


// 글의 갯수를 다시 갱신
        $total=mysql_fetch_array(mysql_query("select count(*) from $t_board"."_$id "));

---------------------------------------------------------

이걸로 수정 끝입니다~ 간단하죠??

참고로~ 함수 설명입니다. 썸네일 함수와 비슷한데 차례로 변수 세개를 받습니다.

watermark($file, $save_filename, $water_file)

첫번째 $file 은 원본 파일이고... $save_filename은 썸네일때와 같이 파일명 뒤에 붙는 이름입니다. 그리고 $water_file 은 워터마크로 쓸 파일이름입니다.

일단 저장하기 버튼을 누르는 순간 원본에 워터마크를 새긴채로 저장하시고 싶으시면 위의 예 처럼 $save_filename 부분에 "" 이렇게 아무것도 안 넣으시면 원본 대신 워터마크가 적용된 채로 저장이 됩니다. 원본은 사라지는 셈이죠..

그런게 싫으시다면 뭐 watermark($file_name1,".water","images/water.png") 이런식으로 넣어주시면 원본이름.water 이렇게 파일이 하나 더 생성됩니다.

워터마크로 쓸 이미지또한 폴더가 다르다면 $water_file을 수정시면 됩니다.

혹시 워터마크 파일을 따로 생성해서 쓰시는 분들은 삭제 버튼을 누를때 워터마크 파일도 같이 삭제되게 하고 싶으시면 앞서 썸네일 생성하기 편의 수정법처럼.. delete_ok.php 과 write_ok.php 파일에 unlike 문을 추가해 주시면 됩니다. ^^ 잘 안되면 질문을~~



(주1)
gif 파일 생성에는 문제가 좀 있습니다. 그냥 단순한 gif 파일의 경우에는 별 큰 문제는 없는데, 애니메이트GIF, 즉 움직이는 gif 파일인 경우에는 문제가 좀 있군요.. 애니메이트가 사라져 버립니다. 이걸 살리실려면.. 프레임마다 나눠서 합쳐주는게 있긴 한데.. 제 호스팅 회사가 gif 라이팅이 제대로 안되고 있어서.. 시험해 볼수가 없네요.. ^^;;; phpschool 에 가시면 애니메이트 gif 프레임 살리면서 저장하는법이 있습니다. 이걸 잘 응용하시면 수정하실수 있을겁니당.. ^^ 넘 무책임한가여? 그래도 테스트를 해볼수가 없으니 만들수가 없네여~ ^^ 암튼 gif 파일이 맘에 걸리시는 분은..
if(eregi(".jpg|.png|.jpeg|.gif|.bmp",$file_name1)) watermark($file_name1,"","images/water.png"); 여길..
if(eregi(".jpg|.png|.jpeg|.bmp",$file_name1)) watermark($file_name1,"","images/water.png"); 이렇게 해서 gif 부분을 빼주면 gif 파일인 경우 워터마크 삽입을 안하게 됩니다. 참고하시길~

(주2)
워터마크 생성되는 위치 부분입니다. 현재 소스로는 워터마크가 원본이미지의 오른쪽 아래에서 3픽셀만큼씩 떨어진 부분에 위치하게 되어 있습니다.

이미지 한가운데는..
$offset_X = ($img_width - $water_x) / 2;
$offset_Y = ($img_height - $water_y) / 2;

오른쪽 위는
$offset_X = $img_width - $water_x - 3;
$offset_Y = 3;

왼쪽 아래는
$offset_X = 3;
$offset_Y = $img_height - $water_y - 3;

왼쪽 위는
$offset_X = 3;
$offset_Y = 3;

이정도로 해주시면 되겠네요.. 물론, 원본 이미지에서 3픽셀씩 떨어진 위치니깐.. 이것도 필요하면 조정하시면 됩니다.

(주3)
마지막으로 워터마크의 밝기입니다.
if ( $rgb["red"]   > 177)  $rgb["red"] = $rgb["red"] - 50;
else                          $rgb["red"] = $rgb["red"] + 50;
if ( $rgb["green"] > 177)  $rgb["green"] = $rgb["green"] - 50;
....
이런부분이 있습니다. 끝부분의 50을 모조리 수정해 주시면 됩니다. 좀더 흐릿하게 숫자를 작게.. 밝게 할려면 더 크게 잡아주면 됩니다.

첨부파일

댓글목록

등록된 댓글이 없습니다.

PHP
871 (8/18P)

Search

Copyright © Cmd 명령어 13.59.134.65