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 相关文章推荐
手把手教你使用DedeCms的采集的图文教程
Mar 11 PHP
在php MYSQL中插入当前时间
Apr 06 PHP
PHP 类型转换函数intval
Jun 20 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
基于php伪静态的实现详细介绍
Apr 28 PHP
PHP防范SQL注入的具体方法详解(测试通过)
May 09 PHP
php中curl和file_get_content的区别
May 10 PHP
php实现事件监听与触发的方法
Nov 21 PHP
php实现mysql备份恢复分卷处理的方法
Dec 26 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
Mar 13 PHP
Symfony2中被遗弃的getRequest()方法分析
Mar 17 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 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
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
2010/02/09 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
PHP不使用递归的无限级分类简单实例
2016/11/05 PHP
Javascript 学习书 推荐
2009/06/13 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
vue音乐播放器插件vue-aplayer的配置及其使用实例详解
2017/07/10 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
vue-cli3.X快速创建项目的方法步骤
2019/11/14 Javascript
webpack打包优化的几个方法总结
2020/02/10 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
Flask框架信号用法实例分析
2018/07/24 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
python+OpenCV实现图像拼接
2020/03/05 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
从python读取sql的实例方法
2020/07/21 Python
财产公证书样本
2014/04/04 职场文书
重大事项社会稳定风险评估方案
2014/06/15 职场文书
班级心理活动总结
2014/07/04 职场文书
食品安全演讲稿
2014/09/01 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
教师个人培训总结
2015/02/11 职场文书
介绍信怎么写
2015/05/05 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
银行服务理念口号
2015/12/25 职场文书
七年级作文之英语老师
2019/10/28 职场文书