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 相关文章推荐
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
php中变量及部分适用方法
Mar 27 PHP
php 图片上传类代码
Jul 17 PHP
php实现图片缩放功能类
Dec 18 PHP
非常实用的php弹出错误警告函数扩展性强
Jan 17 PHP
采用memcache在web集群中实现session的同步会话
Jul 05 PHP
PHP生成唯一订单号
Jul 05 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 PHP
PHP数组相加操作及与array_merge的区别浅析
Nov 26 PHP
PHP中Trait及其应用详解
Feb 14 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
php实现数组重复数字统计实例
Sep 30 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
为查询结果建立向后/向前按钮
2006/10/09 PHP
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
学习ExtJS TextField常用方法
2009/10/07 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
浅析Node.js:DNS模块的使用
2016/11/23 Javascript
详解用Node.js实现Restful风格webservice
2017/09/29 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
JS FormData对象使用方法实例详解
2020/02/12 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
2020/09/02 Javascript
Python 的内置字符串方法小结
2016/03/15 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
python中 logging的使用详解
2017/10/25 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
VSCode Python开发环境配置的详细步骤
2019/02/22 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
pandas的resample重采样的使用
2020/04/24 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
2021/01/26 Python
介绍下WebSphere的安全性
2013/01/31 面试题
局域网标准
2016/09/10 面试题
家长评语大全
2014/01/22 职场文书
销售主管岗位职责范本
2014/02/14 职场文书
财务会计大学生自我评价
2014/04/09 职场文书
计划生育证明格式范本
2014/09/12 职场文书
元宵节晚会主持词
2015/07/01 职场文书
分家协议书范本
2016/03/22 职场文书
毕业生就业推荐表自我鉴定
2019/06/20 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
logback如何自定义日志存储
2021/08/30 Java/Android