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 相关文章推荐
详细介绍:Apache+PHP+MySQL配置攻略
Sep 05 PHP
PHP默认安装产生系统漏洞
Oct 09 PHP
怎么样可以把 phpinfo()屏蔽掉?
Nov 24 PHP
PHP采集腾讯微博的实现代码
Jan 19 PHP
php设计模式之观察者模式的应用详解
May 21 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
php获取YouTube视频信息的方法
Feb 11 PHP
php实现Session存储到Redis
Nov 11 PHP
win平台安装配置Nginx+php+mysql 环境
Jan 12 PHP
php设计模式之委托模式
Feb 13 PHP
php读取txt文件并将数据插入到数据库
Feb 23 PHP
thinkPHP框架实现多表查询的方法
Jun 14 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
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
微信支付开发交易通知实例
2016/07/12 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
最短的IE判断代码
2011/03/13 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
2014/06/26 Javascript
JavaScript中setMonth()方法的使用详解
2015/06/11 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
Python与shell的3种交互方式介绍
2015/04/11 Python
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
Python迭代器定义与简单用法分析
2018/04/30 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
中国汽车租赁行业头部企业:一嗨租车
2019/05/16 全球购物
应届生会计电算化求职信
2013/10/03 职场文书
小学生新年寄语
2014/04/03 职场文书
爱的承诺书
2015/01/20 职场文书
幼儿园2015年度工作总结
2015/04/01 职场文书
担保书范文
2019/07/09 职场文书
vue+spring boot实现校验码功能
2021/05/27 Vue.js
压缩Redis里的字符串大对象操作
2021/06/23 Redis
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python