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 相关文章推荐
PHP 简单数组排序实现代码
Aug 05 PHP
PHP 工厂模式使用方法
May 18 PHP
克隆一个新项目的快捷方式
Apr 10 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
PHP面向对象程序设计之接口用法
Aug 20 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
Zend Framework前端控制器用法示例
Dec 11 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
详解php与ethereum客户端交互
Apr 28 PHP
Laravel自动生成UUID,从建表到使用详解
Oct 24 PHP
如何判断微信付款码和支付宝付款码
Apr 01 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
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
2009/10/29 PHP
PHP之生成GIF动画的实现方法
2013/06/07 PHP
php二分查找二种实现示例
2014/03/12 PHP
PHP实现更新中间关联表数据的两种方法
2014/09/01 PHP
php猴子选大王问题解决方法
2015/05/12 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
2016/12/09 PHP
深入认识JavaScript中的函数
2007/01/22 Javascript
Javascript this关键字使用分析
2008/10/21 Javascript
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
2013/05/07 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
js 实现的可折叠留言板(附源码下载)
2014/07/01 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
Jquery EasyUI Datagrid右键菜单实现方法
2016/12/30 Javascript
jQuery实现ajax无刷新分页页码控件
2017/02/28 Javascript
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
python使用tensorflow深度学习识别验证码
2018/04/03 Python
Python中按值来获取指定的键
2019/03/04 Python
python Django的web开发实例(入门)
2019/07/31 Python
Python文件操作函数用法实例详解
2019/12/24 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
中文系师范生自荐信
2013/10/01 职场文书
高级技校毕业生自荐信
2013/11/18 职场文书
大学生演讲稿范文
2014/01/11 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
文明单位汇报材料
2014/12/24 职场文书
2015年项目经理工作总结
2015/04/30 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers