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 相关文章推荐
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
php cache类代码(php数据缓存类)
Apr 15 PHP
php学习笔记(三)操作符与控制结构
Aug 06 PHP
解析php session_set_save_handler 函数的用法(mysql)
Jun 29 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
Dec 18 PHP
php内存缓存实现方法
Jan 24 PHP
PHP获取文件夹大小函数用法实例
Jul 01 PHP
织梦sitemap地图实时推送给百度的教程
Aug 03 PHP
php获取本机真实IP地址实例代码
Mar 31 PHP
Yii列表定义与使用分页方法小结(3种方法)
Jul 15 PHP
CodeIgniter框架常见用法工作总结
Mar 16 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 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设计模式中工厂模式详细介绍
2013/05/15 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
在js中使用&quot;with&quot;语句中跨frame的变量引用问题
2007/03/08 Javascript
JavaScript 语法集锦 脚本之家基础推荐
2009/11/15 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
javascript控制图片播放的实现代码
2020/07/29 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
python三元运算符实现方法
2013/12/17 Python
Python数据库的连接实现方法与注意事项
2016/02/27 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
如何理解transaction事务的概念
2015/05/27 面试题
实习教师自我鉴定
2013/12/12 职场文书
员工年终演讲稿
2014/01/03 职场文书
运动会广播稿200字
2014/01/15 职场文书
个人整改方案范文
2014/10/25 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
团员个人年度总结
2015/02/26 职场文书
2015纪念九一八事变84周年演讲稿
2015/03/19 职场文书
学校社团活动总结
2015/05/07 职场文书
大学生暑期实践报告
2015/07/13 职场文书
保安辞职申请书应该怎么写?
2019/07/15 职场文书
详解MongoDB排序时内存大小限制与创建索引的注意事项
2022/05/06 MongoDB