赞
踩
来源:PHP基础案例教程
在PHP中,水印的实现通常使用imagecopymerge()函数,它既可以完成水印的添加,又可以设置水印合并的程度
water.php
根据imagecopymerge()函数的参数,可以确定自定义的水印生成函数watermark()需要的参数、原图和水印图片的路径
<?php /* *使用数组根据MIME类型保存对应的函数 * 参数一:表示图片的路径 * 参数二:用于区分是创建资源还是输出资源 */ $func=[ 'image/jpeg' =>function($file,$img=null){ return $img ? imagepng($img):imagecreatefromjpeg($file); }, 'image/png' =>function($file,$img=null){ return $img ? imagepng($img):imagecreatefrompng($file); }, 'image/gif' =>function($file,$img=null){ return $img ? imagepng($img):imagecreatefromgif($file); } ]; /** * $srcfile:原图路径 * $waterfile:水印图片路径 * $pct:水印合并的效果,默认为100 * $position:添加水印的位置,默认左上角 * 左上角:1,右上角:2,中间:3,左下:4,右下:5 */ function watermark($srcfile,$waterfile,$pct=100,$position=1){ //根据MIME类型和路径完成原图和水印图片资源的创建 $src_mime=getimagesize($srcfile)['mime']; $wat_mime=getimagesize($waterfile)['mime']; $src=$GLOBALS['func'][$src_mime]($srcfile); $wat=$GLOBALS['func'][$wat_mime]($waterfile); //从数组中获取原图和水印的宽高 list($src_w,$src_h)=getimagesize($srcfile); list($wat_w,$wat_h)=getimagesize($waterfile); //水印位置 switch($position){ case 1: //坐上 $src_x=$src_y=0; break; case 2: //右上 $src_x=$src_w-$wat_w; $src_y=0; break; case 3: //中间 $src_x=($src_w-$wat_w)/2; $src_y=($src_h-$wat_h)/2; break; case 4: //坐下 $src_x=0; $src_y=$src_h-$wat_h; break; case 5: //右下 $src_x=$src_w-$wat_w; $src_y=$src_h-$wat_h; break; } //生成水印并返回结果 imagecopymerge($src, $wat, $src_x, $src_y, 0, 0, $wat_w, $wat_h, $pct); return $src; } ?>
示例
<?php
include_once './watermark.php';
$srcfile='../image/abcd.jpg'; //原图
$waterfile='../image/wunsun-logo.png'; //水印图片
$mime=getimagesize($srcfile)['mime']; //获取原图MIME类型
$wat=watermark($srcfile, $waterfile,50,5); //生成带有水印的图片
header("Content-Type:$mime"); //指定新图片的MIME类型
$func[$mime]($srcfile,$wat); //输出新图片
?>
原图:
水印图片:
最终图片:
效果好些有点差
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。