허접한 팁이지만 필요하신 분이 계실지도 몰라 올립니다.

이것을 사용하시려면 GD 라이브러리가 설치되어 있어야 합니다.

 

새로 생성해야 하는 것은 총 3개입니다.

1. 이미지를 생성하는 php 파일, 2. 이미지 생성의 기반이 되는 검은배경의 png 파일, 3. 이미지가 저장되는 폴더

저장하는 방식을 사용하는 것은 관리의 유용성을 위해서 입니다.

 

1. 이미지를 생성하는 php 파일

<?php

$string = $_GET['ip'];
$filename = "$_SERVER[REMOTE_ADDR]";
$directory = "3번의 폴더명/".$filename.".png";

$im = imagecreatefrompng("2번의 파일명.png");
$black = imagecolorallocate($im,0,0,0);
$textcolor = imagecolorallocate($im,245,245,245);
imagecolortransparent($im, $black);

Imagestring($im,2,rand(5,200),rand(5,200),$string,$textcolor);
Imagestring($im,2,rand(5,200),rand(5,200),$string,$textcolor);
Imagestring($im,2,rand(5,200),rand(5,200),$string,$textcolor);
Imagestring($im,2,rand(5,200),rand(5,200),$string,$textcolor);
Imagestring($im,2,rand(5,200),rand(5,200),$string,$textcolor);
Imagestring($im,2,rand(5,200),rand(5,200),$string,$textcolor);
Imagestring($im,2,rand(5,200),rand(5,200),$string,$textcolor);
Imagestring($im,2,rand(5,200),rand(5,200),$string,$textcolor);
Imagestring($im,2,rand(5,200),rand(5,200),$string,$textcolor);
Imagestring($im,2,rand(5,200),rand(5,200),$string,$textcolor);

header("Content-type: image/png");
imagepng($im, $directory, 5);
imagepng($im);
imagedestroy($im);

?>

 

위와 같은 php 파일을 생성하여 최상위에 넣어줍니다. (2번 파일과 3번 폴더도 같이 최상위에 생성하시면 됩니다.) 글자색깔은 $textcolor을 바꾸시면 됩니다. 제 경우 연한 것을 선호하여 245, 245, 245로 하였습니다. 글자크기도 바꿀 수 있는데 Imagestring의 $im 뒤의 2라는 숫자를 교체하시면 바뀝니다. (5까지 지원)

 

2. png 파일

2번 png 파일의 경우 저는 300x300 기준의 크기로 제작했습니다. php 파일을 보시면 텍스트의 위치를 랜덤으로 했는데 png 파일의 크기는 위치의 범위와 관련이 있습니다. 만약 png 파일의 크기가 이보다 작다면 Imagestring의 rand(5,200)에서 200의 숫자를 줄여야 합니다. 크다면 그 반대로 높이는 게 좋습니다. 배경색은 무조건 검정(#000)이어야 합니다. 그래야지 글자만 제외하고 투명하게 변합니다. php에 입력한 이름과 동일한 파일명을 가져야 합니다.

 

3. 이미지가 저장되는 폴더

php에 입력한 이름과 동일해야 합니다.

 

마지막으로

레이아웃이나 게시판 스킨 등을 수정하여 style 태그를 삽입합니다. html 파일 내부에 사용하셔야 합니다.

<style>원하는 부분의 클래스명{background:url(../php파일명.php?ip={getenv('REMOTE_ADDR')})}</style>

 

  • profile
    팁은 추천!
  • ?
    너무 감사드립니다! 천천히 읽고 따라해보겠습니다.
  • ?
    분위기를 깨는 태클(?)일수도 있는데요. 복잡한 연산이 필요없고 워터마크 이미지만 만들어준다면, 차라리 CSS로 뒤에 있는 배경처럼 만들어주는 게 오히려 유지보수나 성능 면에서 유리할 수도 있어요.
  • ? ?
    본문은 IP 기준이긴 합니다만 제 경우엔 IP가 아니라 구별 가능한 정보를 약간의 암호화 과정을 거쳐서 사용 중이라 GD 라이브러리를 이용한 방식을 쓰고 있습니다. 부분적으로 떼어온 팁이긴 한데 비효율적으로 보이면 뭐 팁이라고 볼 수는 없겠네요ㅎㅎ
  • ? ?
    아하. 그런 의도로 글을 쓰신 줄은 몰랐네요.

    이게 꼭 비효율적이다는 얘기는 아니고요ㅠ.ㅠ 방문자가 많으면 그만큼 웹 서버가 처리해야 하는 게 많아지죠.
    그리고 무엇보다... 초보자분들이 그냥 팁만 보고 따라했다가, 상황에 따라서 사이트 속도가 느려질 수도 있으니까요. 가끔씩, 팁을 적용하고 속도 느려졌다고 글 올라오는 것을 종종 보니까 괜히 답답한 마음에 글을 올리네요.
  • ? ?
    제가 적용했을 때는 속도가 눈에 띄게 저하된다거나 하는 경험을 해보지를 못해서... 방문자수를 고려한 팁은 아니니 적용하시려는 분들이 SimpleCode님 댓글을 꼭 참고하셨으면 좋겠네요^^
  • profile
    몇 가지 수정 제안...

    $filename과 $string은 항상 같은 값일 테니, 굳이 IP를 GET으로 넘길 필요는 없을 것 같습니다.

    심플코드님의 성능 걱정을 해결하려면 해당 IP의 이미지 파일이 이미 존재하는 경우 gd를 호출하지 말고 이미 있는 파일을 그대로 뿌려주면 됩니다.

    style 태그를 작성할 때부터 실제 이미지파일 경로에 직접 링크해 준다면 이상적이겠지만, 그냥 별도의 php 파일로 처리하는 게 편하다면 불필요한 반복 요청을 막기 위해 Cache-Control 헤더만이라도 넉넉하게 잡아주세요. (단, 이 경우에는 IP를 GET으로 넘기는 게 안전합니다.)
  • profile ?
    get으로 넘기는 방식을 썼던 이유가 있었던 듯한데 아마 그 배경까지 누가 긁어갔을 때 get 값을 유지시키려고 했었던 것 같습니다. 근데 테스트해보니 배경이 안 긁히네요ㅡㅡ; 좀 더 심플하게 올릴 걸 그랬습니다.
  • profile
    이걸 하면 외부유출 방지가 제법 되겠네요 굳!