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 相关文章推荐
基于mysql的论坛(3)
Oct 09 PHP
discuz安全提问算法
Jun 06 PHP
smarty的保留变量问题
Oct 23 PHP
精通php的十大要点(上)
Feb 04 PHP
php全局变量和类配合使用深刻理解
Jun 05 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
Oct 29 PHP
php实现将上传word文件转为html的方法
Jun 03 PHP
php常用表单验证类用法实例
Jun 18 PHP
PHP多种序列化/反序列化的方法详解
Jun 23 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 PHP
php curl优化下载微信头像的方法总结
Sep 07 PHP
php自动加载代码实例详解
Feb 26 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 header()函数常用方法总结
2014/04/11 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
laravel 4安装及入门图文教程
2014/10/29 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
2017/01/30 PHP
用PHP的socket实现客户端到服务端的通信实例详解
2017/02/04 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
设定php简写功能的方法
2019/11/28 PHP
Javascript读取cookie函数代码
2010/10/16 Javascript
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
简单的js表单验证函数
2013/10/28 Javascript
JavaScript阻止事件冒泡示例分享
2014/12/28 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
实例详解angularjs和ajax的结合使用
2015/10/22 Javascript
JS上传图片预览插件制作(兼容到IE6)
2016/08/07 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
Python识别html主要文本框过程解析
2020/02/18 Python
pytorch读取图像数据转成opencv格式实例
2020/06/02 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
汉森批发:Hansen Wholesale
2018/05/24 全球购物
自荐信的两点禁忌
2013/10/30 职场文书
毕业自荐书
2013/12/09 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
会议接待欢迎标语
2014/10/08 职场文书
运动会通讯稿200字
2015/07/20 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
在pycharm中无法import所安装的库解决方案
2021/05/31 Python
Vue图片裁剪组件实例代码
2021/07/02 Vue.js
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫
Java Spring Boot 正确读取配置文件中的属性的值
2022/04/20 Java/Android
Python开发五子棋小游戏
2022/04/28 Python