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 相关文章推荐
php5新改动之短标记启用方法
Sep 11 PHP
用PHP实现读取和编写XML DOM代码
Apr 07 PHP
php中通过curl smtp发送邮件
Jun 05 PHP
分享下页面关键字抓取components.arrow.com站点代码
Jan 30 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
Jan 04 PHP
smarty内置函数section的用法
Jan 22 PHP
php实现约瑟夫问题的方法小结
Mar 23 PHP
php编写的一个E-mail验证类
Mar 25 PHP
Thinkphp开发--集成极光推送
Sep 15 PHP
PHP如何实现订单的延时处理详解
Dec 30 PHP
PHP通过GD库实现验证码功能示例
Feb 23 PHP
PHP中rename()函数的妙用讲解
Feb 28 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
PHP4中实现动态代理
2006/10/09 PHP
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
php封装单文件上传到数据库(路径)
2017/10/15 PHP
PHP PDOStatement::execute讲解
2019/01/31 PHP
JavaScript 使用技巧精萃(.net html
2009/04/25 Javascript
javascript 跳转代码集合
2009/12/03 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
javascript禁止超链接跳转的方法
2016/02/02 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
three.js快速入门【推荐】
2017/01/21 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
使用vue实现一个电子签名组件的示例代码
2020/01/06 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
python使用PyCharm进行远程开发和调试
2017/11/02 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
python虚拟环境完美部署教程
2019/08/06 Python
python基于event实现线程间通信控制
2020/01/13 Python
深入浅析Python 命令行模块 Click
2020/03/11 Python
python与pycharm有何区别
2020/07/01 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
生物技术研究生自荐信
2013/11/12 职场文书
财务会计毕业生个人求职信
2014/02/03 职场文书
暑期社会实践方案
2014/02/05 职场文书
一体化教学实施方案
2014/05/10 职场文书
高中军训的心得体会
2014/09/01 职场文书
个人查摆剖析材料
2014/10/04 职场文书
会计出纳岗位职责
2015/03/31 职场文书
php 原生分页
2021/04/01 PHP
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis