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中常见问题修改方法总结
Mar 21 PHP
PHP 组件化编程技巧
Jun 06 PHP
PHP无刷新上传文件实现代码
Sep 19 PHP
php中邮箱地址正则表达式实现与详解
Apr 24 PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 PHP
基于PHP开发中的安全防范知识详解
Jun 06 PHP
PHP高手需要要掌握的知识点
Aug 21 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
Oct 16 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
Apr 03 PHP
PHP中的函数声明与使用详解
May 27 PHP
浅析PHP开发规范
Feb 05 PHP
PHP连接及操作PostgreSQL数据库的方法详解
Jan 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
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
PHP创建对象的六种方式实例总结
2019/06/27 PHP
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
事件模型在各浏览器中存在差异
2010/10/20 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
JS检测移动端横竖屏的代码
2016/05/30 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
vuex的简单使用教程
2018/02/02 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
2020/08/07 Python
python推导式的使用方法实例
2021/02/28 Python
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
电脑教师的教学自我评价
2013/11/26 职场文书
党员个人年度总结
2015/02/14 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
礼仪培训心得体会
2016/01/22 职场文书
python基于tkinter制作下班倒计时工具
2021/04/28 Python
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript