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学习笔记之三 数据库基本操作
Jan 17 PHP
PHP 第二节 数据类型之转换
Apr 28 PHP
PHP获取当前url的具体方法全面解析
Nov 26 PHP
PHP将两个关联数组合并函数提高函数效率
Mar 18 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
Jun 05 PHP
php实现获取及设置用户访问页面语言类
Sep 24 PHP
php 在线导入mysql大数据程序
Jun 11 PHP
一张表搞清楚php is_null、empty、isset的区别
Jul 07 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
PHP上传图片、删除图片简单实例
Nov 12 PHP
PHP常用正则表达式精选(推荐)
May 28 PHP
php日志函数error_log用法实例分析
Sep 23 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使HTML标签自动补全闭合函数代码
2012/10/04 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
2014/03/20 PHP
php封装的smarty类完整实例
2016/10/19 PHP
javascript实现二分查找法实现代码
2007/11/12 Javascript
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
Angular指令之restict匹配模式的详解
2017/07/27 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
jQuery Migrate 插件用法实例详解
2019/05/22 jQuery
layui实现把数据表格时间戳转换为时间格式的例子
2019/09/12 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
python实现汉诺塔递归算法经典案例
2021/03/01 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
2018/04/21 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
python Tkinter的图片刷新实例
2019/06/14 Python
实例详解Python装饰器与闭包
2019/07/29 Python
如何运行带参数的python脚本
2019/11/15 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
公司前台辞职报告
2014/01/19 职场文书
《天安门广场》教学反思
2014/04/23 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python
解析MySQL索引的作用
2022/03/03 MySQL