ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整


Posted in PHP onNovember 05, 2014

本文实例讲述了ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整的方法。分享给大家供大家参考。具体实现方法如下:

TP自带有图片类,有给图片加水印的功能。
这里完善了:
1. png水印透明
2. 加水印后质量调整(只限于JPG格式)
代码如下:

/**

+———————————————————-

* 为图片添加水印

+———————————————————-

* @static public

+———————————————————-

* @param string $source 原文件名

* @param string $water 水印图片

* @param string $$savename 添加水印后的图片名

* @param string $alpha 水印的透明度

+———————————————————-

* @return string

+———————————————————-

* @throws ThinkExecption

+———————————————————-

*/

static public function water($source, $water, $savename=null, $alpha=80) {

//检查文件是否存在

if (!file_exists($source) || !file_exists($water))

return false;
//图片信息

$sInfo = self::getImageInfo($source);

$wInfo = self::getImageInfo($water);
//如果图片小于水印图片,不生成图片

if ($sInfo["width"] < $wInfo["width"] || $sInfo['height'] < $wInfo['height'])

return false;
//建立图像

$sCreateFun = "imagecreatefrom" . $sInfo['type'];

$sImage = $sCreateFun($source);

$wCreateFun = "imagecreatefrom" . $wInfo['type'];

$wImage = $wCreateFun($water);
//设定图像的混色模式

imagealphablending($wImage, true);
//图像位置,默认为右下角右对齐

$posY = $sInfo["height"] ? $wInfo["height"];

$posX = $sInfo["width"] ? $wInfo["width"];
/* 为了保持PNG的透明效果 使用imagecopy 此处为修改过的*/

imagecopy($sImage, $wImage, $posX, $posY, 0, 0, $wInfo['width'], $wInfo['height']);

//生成混合图像,这是系统的

// imagecopymerge($sImage, $wImage, $posX, $posY, 0, 0, $wInfo['width'],$wInfo['height'], $alpha);

//输出图像

$ImageFun = 'Image' . $sInfo['type'];

//如果没有给出保存文件名,默认为原图像名

if (!$savename) {

$savename = $source;

@unlink($source);

}

//保存图像,如果是jpg,则设置一下水印质量 此处为修改过的:

if ($sInfo['type'] == "jpg" || $sInfo['type'] == "jpeg") {

imagejpeg($sImage, $savename, 90);//第3个参数即使质量大小,因为只有imagejpeg支持这个参数

} else {

$ImageFun($sImage, $savename);

}

//$ImageFun($sImage, $savename);//这是系统的

imagedestroy($sImage);

}

希望本文所述对大家的ThinkPHP框架程序设计有所帮助。

PHP 相关文章推荐
web目录下不应该存在多余的程序(安全考虑)
May 09 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
Jun 28 PHP
基于PHP常用文件函数和目录函数整理
Aug 17 PHP
php取出数组单个值的方法
Mar 12 PHP
PHP时间处理类操作示例
Sep 05 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
php如何把表单内容提交到数据库
Jul 08 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 PHP
Laravel 简单实现Ajax滚动加载示例
Oct 22 PHP
PHP连接MySQL数据库操作代码实例解析
Jul 11 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 PHP
phpnow php探针环境检测代码
Nov 04 #PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
Nov 04 #PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
Nov 04 #PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
Nov 04 #PHP
PHP自动重命名文件实现方法
Nov 04 #PHP
php以post形式发送xml的方法
Nov 04 #PHP
PHP中Header使用的HTTP协议及常用方法小结
Nov 04 #PHP
You might like
PHP安全配置
2006/12/06 PHP
用来给图片加水印的PHP类
2008/04/09 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
ThinkPHP之M方法实例详解
2014/06/20 PHP
php生成PDF格式文件并且加密
2015/06/22 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
PHP数组访问常用方法解析
2020/09/05 PHP
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
python批量下载图片的三种方法
2013/04/22 Python
Python基于Tkinter实现的记事本实例
2015/06/17 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
python多线程抽象编程模型详解
2019/03/20 Python
python装饰器常见使用方法分析
2019/06/26 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
什么是Python变量作用域
2020/06/03 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
2021/01/12 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
分公司经理岗位职责
2013/11/11 职场文书
公司活动方案范文
2014/03/06 职场文书
父母对孩子说的话
2014/04/12 职场文书
土建工程师岗位职责
2014/06/10 职场文书
家庭困难证明
2014/10/12 职场文书
学习焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
针对吵架老公保证书
2015/05/08 职场文书
python实现简易自习室座位预约系统
2021/06/30 Python