php 图片加水印与上传图片加水印php类


Posted in PHP onMay 12, 2010

一个正规的网站,在需要上传图片时,往往都会需要在图片上增加自己网站的LOGO水印。那么如何实现这一步骤呢?首先让我们来了解PHP图片加水印的原理。
通过判断文件类型建立图形,然后把其复制到原建立的图形上,填充并建立rectangle,以备写入imagestring()或是在原已经定好的图像程序当中判断水印类型:一是字符串,另是增加一个图形对象在上面。以下是PHP图片加水印的转载!

参数说明:

$max_file_size : 上传文件大小限制, 单位BYTE
$destination_folder : 上传文件路径
$watermark : 是否附加水印(1为加水印,其他为不加水印);

PHP图片加水印使用说明:
1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;
2. 将extension_dir =改为你的php_gd2.dll所在目录;
3. https://3water.com/list/list_15_1.htm
PHP图片加水印的代码示例:

//上传文件类型列表 
$uptypes=array( 
'image/jpg', 
'image/jpeg', 
'image/png', 
'image/pjpeg', 
'image/gif', 
'image/bmp', 
'image/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="<A href="http://www.xplore.cn/"> 
http://www.xplore.cn/</A>"; //水印字符串 
$waterimg="xplore.gif"; //水印图片 
$imgpreview=1; //是否生成预览图(1为生成,其他为不生成); 
$imgpreviewsize=1/2; //缩略图比例 
?> 
<html> 
<head> 
<title>ZwelL图片上传程序</title> 
<style type="text/css"> 
<!-- 
body 
{ 
font-size: 9pt; 
} 
input 
{ 
background-color: #66CCFF; 
border: 1px inset #CCCCCC; 
} 
--> 
</style> 
</head> 
<body> 
<form enctype="multipart/form-data" 
method="post" name="upform"> 
上传文件: 
<input name="upfile" type="file"> 
<input type="submit" value="上传"><br> 
允许上传的文件类型为:<?=implode(', ',$uptypes)?> 
</form> 
<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
if (!is_uploaded_file($_FILES["upfile"] 
[tmp_name])) 
//是否存在文件 
{ 
echo "图片不存在!"; 
exit; 
} 
$file = $_FILES["upfile"]; 
if($max_file_size <$file["size"]) 
//检查文件大小 
{ 
echo "文件太大!"; 
exit; 
} 
if(!in_array($file["type"], $uptypes)) 
//检查文件类型 
{ 
echo "文件类型不符!".$file["type"]; 
exit; 
} 
if(!file_exists($destination_folder)) 
{ 
mkdir($destination_folder); 
} 
$filename=$file["tmp_name"]; 
$image_size = getimagesize($filename); 
$pinfo=pathinfo($file["name"]); 
$ftype=$pinfo['extension']; 
$destination = $destination_folder. 
time().".".$ftype; 
if (file_exists($destination) && 
$overwrite != true) 
{ 
echo "同名文件已经存在了"; 
exit; 
} 
if(!move_uploaded_file ($filename, 
$destination)) 
{ 
echo "移动文件出错"; 
exit; 
} 
$pinfo=pathinfo($destination); 
$fname=$pinfo[basename]; 
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"]." bytes"; 
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); 
switch ($iinfo[2]) 
{ 
case 1: 
$simage =imagecreatefromgif($destination); 
break; 
case 2: 
$simage =imagecreatefromjpeg($destination); 
break; 
case 3: 
$simage =imagecreatefrompng($destination); 
break; 
case 6: 
$simage =imagecreatefromwbmp($destination); 
break; 
default: 
die("不支持的文件类型"); 
exit; 
} 
imagecopy($nimage,$simage,0,0,0,0, 
$image_size[0],$image_size[1]); 
imagefilledrectangle($nimage,1, 
$image_size[1]-15,80,$image_size[1],$white); 
switch($watertype) 
{ 
case 1: //加水印字符串 
imagestring($nimage,2,3,$image_size[1]-15, 
$waterstring,$black); 
break; 
case 2: //加水印图片 
$simage1 =imagecreatefromgif("xplore.gif"); 
imagecopy($nimage,$simage1,0,0,0,0,85,15); 
imagedestroy($simage1); 
break; 
} 
switch ($iinfo[2]) 
{ 
case 1: 
//imagegif($nimage, $destination); 
imagejpeg($nimage, $destination); 
break; 
case 2: 
imagejpeg($nimage, $destination); 
break; 
case 3: 
imagepng($nimage, $destination); 
break; 
case 6: 
imagewbmp($nimage, $destination); 
//imagejpeg($nimage, $destination); 
break; 
} 
//覆盖原上传文件 
imagedestroy($nimage); 
imagedestroy($simage); 
} 
if($imgpreview==1) 
{ 
echo "<br>图片预览:<br>"; 
echo "<ccid_file values="\" width=". 
($image_size[0]*$imgpreviewsize)." 
height=".($image_size[1]*$imgpreviewsize);" 
echo " alt=\"图片预览:\r文件名:". 
$destination."\r上传时间:\" />"; 
} 
} 
?> 
</body> 
</html>

大家也可以参考 图片加水印的PHP类

PHP 相关文章推荐
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
Dec 13 PHP
PHP入门学习笔记之一
Oct 12 PHP
php根据年月获取季度的方法
Mar 31 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
浅谈php中include文件变量作用域
Jun 18 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
Dec 11 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
Oct 20 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
Apr 24 PHP
php实现数字补零的方法总结
Sep 12 PHP
详细对比php中类继承和接口继承
Oct 11 PHP
PHP使用PDO操作sqlite数据库应用案例
Mar 07 PHP
php access 数据连接与读取保存编辑数据的实现代码
May 12 #PHP
简单PHP上传图片、删除图片实现代码
May 12 #PHP
php 删除记录同时删除图片文件的实现代码
May 12 #PHP
Godaddy空间Zend Optimizer升级方法
May 10 #PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 #PHP
PHP chmod 函数与批量修改文件目录权限
May 10 #PHP
php file_exists 检查文件或目录是否存在的函数
May 10 #PHP
You might like
使用PHP制作新闻系统的思路
2006/10/09 PHP
php开发工具之vs2005图解
2008/01/12 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
浅谈PHP无限极分类原理
2019/03/14 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
Laravel监听数据库访问,打印SQL的例子
2019/10/24 PHP
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
2010/10/18 Javascript
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
2017/09/30 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
2018/07/07 Javascript
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
微信小程序时间轴实现方法示例
2019/01/14 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
python实现探测socket和web服务示例
2014/03/28 Python
python利用正则表达式搜索单词示例代码
2017/09/24 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
利用python画出折线图
2018/07/26 Python
python多任务及返回值的处理方法
2019/01/22 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
技校生自我鉴定范文
2013/09/26 职场文书
小学语文国培感言
2014/03/04 职场文书
青春演讲稿范文
2014/05/08 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
个人合伙协议书范本
2014/10/14 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书