PHP의 GD 라이브러리에 익숙하다면 이 기사를 이해하는 것이 전혀 어렵지 않습니다!
<?php
/**************************************************** ***** *******************************
매개변수 설명:
$max_file_size: 업로드 파일 크기 제한, 단위 BYTE
$destination_folder: 업로드 파일 경로
$watermark: 워터마크 추가 여부(1은 워터마크 추가를 의미하고, 나머지는 워터마크를 추가하지 않음을 의미)
;
1. GD 라이브러리를 사용해야 하므로 PHP.INI 파일의 "extension=php_gd2.dll" 줄 앞에 있는 ; 기호를 제거합니다.
2. Extension_dir =을 php_gd2.dll이 있는 디렉토리로 변경하십시오.
************************************************** * ******************************/
//파일 형식 목록 업로드
$uptypes=배열(
'이미지/jpg',
'이미지/jpeg',
'이미지/png',
'이미지/pjpeg',
'이미지/gif',
'이미지/bmp',
'이미지/x-png'
);
$max_file_size=2000000; //업로드 파일 크기 제한, 단위 BYTE
$destination_folder="uploadimg/"; //파일 경로 업로드
$watermark=1; //워터마크 추가 여부(1은 워터마크 추가, 나머지는 워터마크 추가 안함);
$watertype=1; //워터마크 유형(1은 텍스트, 2는 그림)
$waterposition=1; //워터마크 위치(1은 왼쪽 하단, 2는 오른쪽 하단, 3은 왼쪽 상단, 4는 오른쪽 상단, 5는 중앙);
$waterstring=" http://www.xplore.cn/ " //워터마크 문자열
$waterimg="xplore.gif"; //워터마크 이미지
$imgpreview=1; //미리보기 이미지를 생성할지 여부(1은 생성됨을 의미하고 나머지는 생성되지 않음);
$imgpreviewsize=1/2; //썸네일 비율
?>
<html>
<머리>
<title>ZwelL 사진 업로드 프로그램</title>
<스타일 유형="텍스트/css">
<!--
몸
{
글꼴 크기: 9pt;
}
입력
{
배경색: #66CCFF;
테두리: 1px 삽입 #CCCCCC;
}
-->
</style>
</head>
<본문>
<form enctype="multipart/form-data" method="post" name="upform">
파일 업로드:
<입력 이름="업파일" 유형="파일">
<input type="submit" value="업로드"><br>
업로드가 허용되는 파일 형식은 다음과 같습니다.<?=implode(', ',$uptypes)?>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (!is_uploaded_file($_FILES["upfile"][tmp_name]))
//파일이 존재하는가?
{
echo "해당 사진이 존재하지 않습니다!";
출구;
}
$file = $_FILES["업파일"];
if($max_file_size < $file["크기"])
//파일 크기 확인
{
echo "파일이 너무 큽니다!";
출구;
}
if(!in_array($file["type"], $uptypes))
//파일 형식 확인
{
echo "파일 형식이 일치하지 않습니다!".$file["type"];
출구;
}
if(!file_exists($destination_folder))
{
mkdir($destination_folder);
}
$filename=$file["tmp_name"];
$image_size = getimagesize($filename);
$pinfo=경로정보($file["이름"]);
$ftype=$pinfo['확장자'];
$destination = $destination_folder.time().".".$ftype;
if (file_exists($destination) && $overwrite != true)
{
echo "같은 이름의 파일이 이미 존재합니다.";
출구;
}
if(!move_uploaded_file ($filename, $destination))
{
echo "파일 이동 오류";
출구;
}
$pinfo=경로정보($destination);
$fname=$pinfo[베이스이름];
echo " <font color=red>업로드되었습니다.</font><br>파일 이름: <font color=blue>".$destination_folder.$fname."</font><br>";
echo "너비:".$image_size[0];
echo "길이:".$image_size[1];
echo "<br> 크기:".$file["size"]." 바이트"
if($watermark==1)
{
$iinfo=getimagesize($destination,$iinfo);
$nimage=imagecreatetruecolor($image_size[0],$image_size[1]);
$white=imagecolorallocate($nimage,255,255,255);
$black=imagecolorallocate($nimage,0,0,0);
$red=imagecolorallocate($nimage,255,0,0);
imagefill($nimage,0,0,$white);
스위치 ($iinfo[2])
{
사례 1:
$simage =imagecreatefromgif($destination);
부서지다;
사례 2:
$simage =imagecreatefromjpeg($destination);
부서지다;
사례 3:
$simage =imagecreatefrompng($destination);
부서지다;
사례 6:
$simage =imagecreatefromwbmp($destination);
부서지다;
기본:
die("지원되지 않는 파일 형식입니다.";
출구;
}
imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);
imagefilled직사각형($nimage,1,$image_size[1]-15,80,$image_size[1],$white)
스위치($watertype)
{
사례 1: //워터마크 문자열 추가
imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);
부서지다;
사례 2: //워터마크 이미지 추가
$simage1 =imagecreatefromgif("xplore.gif";
imagecopy($nimage,$simage1,0,0,0,0,85,15);
imagedestroy($simage1);
부서지다;
}
스위치($iinfo[2])
{
사례 1:
//imagegif($nimage, $destination);
imagejpeg($nimage, $destination);
부서지다;
사례 2:
imagejpeg($nimage, $destination);
부서지다;
사례 3:
imagepng($nimage, $destination);
부서지다;
사례 6:
imagewbmp($nimage, $destination);
//imagejpeg($nimage, $destination);
부서지다;
}
//업로드된 원본 파일을 덮어씁니다.
imagedestroy($nimage);
imagedestroy($simage);
}
if($imgpreview==1)
{
echo "<br>사진 미리보기:<br>";
echo "<img src="".$destination."" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize);
echo " alt="사진 미리보기:r파일 이름:".$destination."r업로드 시간:">";
}
}
?>
</body>
</html>
마지막으로,
업로드된 파일 정보를 얻어 트루 컬러 이미지를 생성하고, 색 구성표를 지정하고 이미지를 채우는
워터마킹 이미지의 원리에 대해 이야기할 필요가 있다고 생각합니다.
파일 유형을 판단하여 그래픽을 생성한 다음 원래 생성된 그래픽에 복사하고 직사각형을 채워서 imagestring() 또는 원본 이미지
프로그램에 쓸 수 있도록 준비하여 워터마크 유형을 결정합니다. 하나는 문자열이고 다른 하나는 상단에 그래픽 개체를 추가하는 것입니다.