查看完整版本: PHP实例:实现给上传图片加水印图案

snowfox373 2007-10-18 13:49

PHP实例:实现给上传图片加水印图案

 用PHP给上传图片加水印的程序是通过判断文件类型建立图形,然后把其复制到原建立的图形上,填充并建立rectangle,以备写入imagestring()或是原已经定好的图像程序当中判断水印类型:一是字符串,另是增加一个图形对象在上面。如果你对PHP的GD库比较熟悉,看懂这篇文章一点都不难了![code]/*****************************************************
lx"l-k#Rkp*WK 参数说明:
Wl-WU7I d `Q $max_file_size  : 上传文件大小限制, 单位BYTE koe2Va ]S`
$destination_folder : 上传文件路径 0k {Q7v2AV!](O
$watermark   : 是否附加水印(1为加水印,其他为不加水印);
9Wy.E.mC&BJ5k 使用说明:
,u1xhi*B 1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;
"t dg]W.eF2F 2. 将extension_dir =改为你的php_gd2.dll所在目录;
P6OD|e ****************************************************/
0J;@!cH)N3]h'p3l //上传文件类型列表 P%P&B$`%NYI#f
$uptypes=array(
k3`^%Z Tw,D6j     'image/jpg',  4l"b'^ [w
    'image/jpeg', 6},a1{$D![Z/w?6G6R
    'image/png', RdVe%U*e)t9g9pP8R
    'image/pjpeg',
)K Kg.G-r;}5b)i     'image/gif',
Qda)P,l     'image/bmp', FHhv QA${E
    'image/x-png' k|8j:q9j5uS.V!Z
);
&f"w4iO&ON9f:w(n $max_file_size=2000000;     //上传文件大小限制, 单位BYTE 7x#Eb \M|
$destination_folder="uploadimg/"; //上传文件路径 0dSmeq%I8{WR[
$watermark=1;      //是否附加水印(1为加水印,其他为不加水印);
!i D.X%G"v4e,^#Dyy(K $watertype=1;      //水印类型(1为文字,2为图片) N7`)xi9p,H8KN
$waterposition=1;     //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中);
` B0Pd6V $waterstring="http://www.xplore.cn/";  //水印字符串 zH:K.N p w
$waterimg="xplore.gif";    //水印图片
I6jL){/Cn ]Y $imgpreview=1;      //是否生成预览图(1为生成,其他为不生成); +qPZh;fX
$imgpreviewsize=1/2;    //缩略图比例 )v]&~[L!E3S:rcI
?> Y2|G^h)bB#l+?
<html>
1n)BL vK wau <head> "l`Eh6P/PzK
<title>ZwelL图片上传程序</title> sFKS4u6N.g!`$]
<style type="text/css">
-e^+nW5viSn7o <!--
Ix8o p6LJ&C&} body F6E-@ lQfzd4Z
{ +Q!|^A!L#wm U'G
     font-size: 9pt; wqL8WQ,n2p
}
(a|%u(L$K input
4PR2xO? a ~(`5d {
gG"mTP'P~/B!JQ      background-color: #66CCFF; \1`vG8X.P4b~DX!aNI
     border: 1px inset #CCCCCC;
h y'tD&{.\ } @C'o5e:iR U
-->
1}g}Z3\|"X+bN </style>
*z&d,Wox5f </head>
L.l:m$TB4W8LJr;o <body>
9H4l@2lCUs3x FH0~ <form enctype="multipart/form-data" method="post" name="upform">
0r/K0f e-Sm!f)\   上传文件: 4?$Z3e*H&S
  <input name="upfile" type="file">
k;NX/r;m   <input type="submit" value="上传">
coTg(YD dv Z#~t ~g
  允许上传的文件类型为:<?=implode(', ',$uptypes)?>
Z.p;F'u w-K#q </form>
|1T/BqUTq <?php t)g7c&mM5EN)g
if ($_SERVER['REQUEST_METHOD'] == 'POST') grPT_%[
{ /xe;k XY:M Nr J/V
    if (!is_uploaded_file($_FILES["upfile"][tmp_name])) Wo V8D&m@Q P f4P
    //是否存在文件 h;xc+OEKy^ l c
    { L1Q\;}Ib B
         echo "图片不存在!"; PK(Z;^#Ct Uw vvL'd
         exit;
HQ/E_:pnA     } I.h6?c2x T\F-k`
    $file = $_FILES["upfile"]; [!]zWl(q#_:p G
    if($max_file_size < $file["size"]) ? x0J V6BN(X
    //检查文件大小
v&l4R S:}8F(DE     {
Tj.X.L&q2~         echo "文件太大!"; %I/ftY C/}
        exit; OWo W M x
    }
WY"mhl%V }.Ma:x     if(!in_array($file["type"], $uptypes))
f*G^N(L"x     //检查文件类型 .WJXcD dq w
    {
k)d6J0x rd)~%zqP         echo "文件类型不符!".$file["type"];
@,O5P'q6{N         exit;
Bvxz(|/VZU     } (`x3A:tW:?
    if(!file_exists($destination_folder)) 1R9j ~9|^ m
    {
9^u2be H!x4V         mkdir($destination_folder); w2Erq0v,d9{ C b d
    } :L(S.A4fXb6Q9|i
    $filename=$file["tmp_name"]; ,o6P:T`_]@}fEY4_
    $image_size = getimagesize($filename); {G'h5\(`R
    $pinfo=pathinfo($file["name"]);
!`6A.u)I*U     $ftype=$pinfo['extension']; 6WD&~uq!O U
    $destination = $destination_folder.time().".".$ftype;
(bC9B3e[     if (file_exists($destination) && $overwrite != true)
-P%]!z9b$wv0w}     {
3n{8opW*D+K\w0y+\         echo "同名文件已经存在了";
XYqY;^ I {R c         exit; Y-F ^Vi S h
    } |&VB#l/[
    if(!move_uploaded_file ($filename, $destination)) )nM"M#D-IE4Ep!j/S
    { ^6sw7u;^([
        echo "移动文件出错";
*A PF XJ7u)[A         exit;
A.kOUt0]_     } 3Y#G)a;Gt
    $pinfo=pathinfo($destination);
Kx&e6I1MPw[     $fname=$pinfo[basename];
G xbW'g\0W*P0E!Wd/V     echo " <font color=red>已经成功上传</font>GnAK5?5D/^ux y
文件名:  <font color=blue>".$destination_folder.$fname."</font>
)U4_T5s*R7V V(W "; .W;VLn'?
    echo " 宽度:".$image_size[0];
0l0zk8@?lOvE     echo " 长度:".$image_size[1]; Tp z#W6zUPl7x4t
    echo "
RLT| j+d"~5r 大小:".$file["size"]." bytes";
4E4O McQ     if($watermark==1)
M1C,k'g_Q;C*W-l/~ x-~     {
h'X0? PHFq         $iinfo=getimagesize($destination,$iinfo); J8vx!b2`-c
        $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);
K2M4ZA8u9CV]1}         $white=imagecolorallocate($nimage,255,255,255); .oi{o:~3R`
        $black=imagecolorallocate($nimage,0,0,0); ia@WxR]$S#V
        $red=imagecolorallocate($nimage,255,0,0); Su+@|1m!c+z7B*p[(@
        imagefill($nimage,0,0,$white);
R6y$F m3_ B_         switch ($iinfo[2]) K,Q"};rsG
        {
Q#_Wfejqx             case 1:
aK8l!C~_             $simage =imagecreatefromgif($destination); 7HGtLm x
            break;
DhW#Yg#pDQ l             case 2: LoV \"ggl|
            $simage =imagecreatefromjpeg($destination);
0u} e`d op%zW             break;
tG0X5R2nvJ QkO             case 3:
j_| bw A             $simage =imagecreatefrompng($destination); )L9D:X K c.\'r7M
            break;
,?:k_.lID t&gDPKA             case 6: 2G5p2G3A D {*n
            $simage =imagecreatefromwbmp($destination); r)V'p fQWm W)g
            break;
(|zYB ?xn.x             default: P+^LF:i:m
            die("不支持的文件类型");
F-C|x J$qp{8r:uU6u             exit; .?3[f o@D_;YEW
        } Q4jN f!I,z&b
        imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);
#P OK7o0a         imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);
I h2D0D a         switch($watertype) #hu!?$``
        {
Xm[*KhjT'rL&l             case 1:   //加水印字符串 S,U!F'|(Z:Y
            imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black); H!_;zu%}[?
            break;
c(yX4c#gg T             case 2:   //加水印图片 6{.K3Jy;yg8]^
            $simage1 =imagecreatefromgif("xplore.gif"); 2V]+|k H7jm
            imagecopy($nimage,$simage1,0,0,0,0,85,15); ot$e6m&XQf7S8r7~
            imagedestroy($simage1);
rW%s1\ f7u             break;
T*\ a"o7]1~         } -Hbh"e#bb ~CX"W h0G
        switch ($iinfo[2]) Ejd%D;R6u q!]-V Y/Q
        { S0K\tjz,M-Z~;i
            case 1:
'zukWL d%~l0EY             //imagegif($nimage, $destination);
2eSi~1Y]7w/h#f             imagejpeg($nimage, $destination);
:A B }'lql             break; La5T%RU*l%jf V,^Y
            case 2:
'EZ MA p             imagejpeg($nimage, $destination);
y$e |']Nk`)z7z(I             break; Db d x w+q
            case 3: 7\,N/mo2Z[&f
            imagepng($nimage, $destination);
;_t0[u x:J`A'^ t             break;
oH Fevv5O             case 6:
]drN _!d             imagewbmp($nimage, $destination); Pm,LC+rgL
            //imagejpeg($nimage, $destination);
(^S;^2NP]             break; `q&F3vFA
        } 5e%QX1iX|IB
        //覆盖原上传文件
[ y4FSb)r-QBt         imagedestroy($nimage); T6AB^4i/b
        imagedestroy($simage);
$osIgO,L*H     }
1vM%b O7Z8d$f(C.e m     if($imgpreview==1) LH'A#Xn2Qhzt
    {
{'F6TeVm7S     echo "
e1TG VA'c6e 图片预览:
}1bg6k2iT#d,R "; 6a1y|)t!_1P9s
    echo "<img src=\"".$destination."\" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize);
F-IP P9p(z     echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\">";
#TG0] Z8U AeMN"}y     } 0V _%Ba5NDJS?
}
$A \iZ\{d/h ?> 8nVnX-?#u b^
</body>
@3d:H DI|_ </html>[/code]
页: [1]
查看完整版本: PHP实例:实现给上传图片加水印图案