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 相关文章推荐
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
Apr 02 PHP
php代码书写习惯优化小结
Jun 20 PHP
深入解析php中的foreach函数
Aug 31 PHP
php除数取整示例
Apr 24 PHP
PHP程序员基本要求和必备技能
May 09 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
PHP处理Oracle的CLOB实例
Nov 03 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
Yii隐藏URL中index.php的方法
Jul 12 PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 PHP
详解php中空字符串和0之间的关系
Oct 23 PHP
php实现的pdo公共类定义与用法示例
Jul 19 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
php4的session功能评述(二)
2006/10/09 PHP
PHP中foreach循环中使用引用要注意的地方
2011/01/02 PHP
PHP的加密方式及原理
2012/06/14 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
php自定义截取中文字符串-utf8版
2017/02/27 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
简单的三步vuex入门
2018/05/20 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
layui form表单提交之后重新加载数据表格的方法
2019/09/11 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
在Django的视图(View)外使用Session的方法
2015/07/23 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
2020/04/26 Python
Python reques接口测试框架实现代码
2020/07/28 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
客户代表自我评价范例
2013/09/24 职场文书
小饰品店的创业计划书范文
2013/12/28 职场文书
提拔干部考察材料
2014/05/26 职场文书
学校读书活动总结
2014/06/30 职场文书
超市食品安全承诺书
2015/04/29 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
Python中的变量与常量
2021/11/11 Python
php访问对象中的成员的实例方法
2021/11/17 PHP