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 MYSQL乱码问题,使用SET NAMES utf8校正
Nov 30 PHP
并发下常见的加锁及锁的PHP具体实现代码
Oct 12 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
Nov 18 PHP
php-redis中的sort排序函数总结
Jul 08 PHP
phpStudy访问速度慢和启动失败的解决办法
Nov 19 PHP
php中foreach结合curl实现多线程的方法分析
Sep 22 PHP
thinkPHP5.0框架API优化后的友好性分析
Mar 17 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
PHP ADODB实现事务处理功能示例
May 25 PHP
PHP实现 APP端微信支付功能
Jun 22 PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
Dec 16 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版(5)
2006/10/09 PHP
php实现加减法验证码代码
2014/02/14 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
2020/04/23 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
2014/09/11 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
2018/04/18 jQuery
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
低版本中Python除法运算小技巧
2015/04/05 Python
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
Python切片工具pillow用法示例
2018/03/30 Python
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
python实现多进程通信实例分析
2019/09/01 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
python如何使用腾讯云发送短信
2020/09/17 Python
pycharm 代码自动补全的实现方法(图文)
2020/09/18 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
党员学习十八大感想
2014/01/17 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
毕业生找工作求职信
2014/08/05 职场文书
2014年小学校长工作总结
2014/12/08 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
高一军训口号
2015/12/25 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python