PHP图片添加水印功能示例小结


Posted in PHP onOctober 03, 2016

本文实例总结了PHP图片添加水印功能。分享给大家供大家参考,具体如下:

例1、很简单图下添加水印函数

<?php
/**
 * 追加水印
 *
 * @param string $source_img 原始图片url
 * @param string $water_map 水印图片url
 */
function addWaterMap($source_img, $water_map)
{
  $img = imagecreatefromjpeg($source_img); //读取原图
  $img_x = imagesx($img); //原图宽
  $img_y = imagesy($img); //原图高
  imagealphablending($img, true);//设置为混合填色模式
  //$img_water_map = imagecreatefromjpeg($water_map); //读取水印图片
  $img_water_map = imagecreatefrompng($water_map);
  $water_x = imagesx($img_water_map); //水印宽
  $water_y = imagesy($img_water_map); //水印高
  $wimg_x = $img_x - $water_x - 10; //水印x坐标
  $wimg_y = $img_y - $water_y - 10; //水印y坐标
  imagecopy($img, $img_water_map, $wimg_x, $wimg_y, 0, 0, $water_x, $water_y); //分别为原图,水印,水印x坐标,水印y坐标,水印图片横轴开始点,水印图片纵轴开始点,水印横轴结束,水印纵轴结束
  imagejpeg($img, $source_img, 95); //输出到目标文件
  imagedestroy($img); //销毁内存数据流
  imagedestroy($img_water_map); //销毁内存数据流
  return true;
}
?>

实例2、一个比较完整图片增加水印类

<?php
/**
 * 图片加水印(适用于png/jpg/gif格式)
 *
 * @author flynetcn
 *
 * @param $srcImg  原图片
 * @param $waterImg 水印图片
 * @param $savepath 保存路径
 * @param $savename 保存名字
 * @param $positon  水印位置
 *          1:顶部居左, 2:顶部居右, 3:居中, 4:底部局左, 5:底部居右
 * @param $alpha   透明度 -- 0:完全透明, 100:完全不透明
 *
 * @return 成功 -- 加水印后的新图片地址
 *   失败 -- -1:原文件不存在, -2:水印图片不存在, -3:原文件图像对象建立失败
 *       -4:水印文件图像对象建立失败 -5:加水印后的新图片保存失败
 */
function img_water_mark($srcImg, $waterImg, $savepath=null, $savename=null, $positon=5, $alpha=30)
{
 $temp = pathinfo($srcImg);
 $name = $temp['basename'];
 $path = $temp['dirname'];
 $exte = $temp['extension'];
 $savename = $savename ? $savename : $name;
 $savepath = $savepath ? $savepath : $path;
 $savefile = $savepath .'/'. $savename;
 $srcinfo = @getimagesize($srcImg);
 if (!$srcinfo) {
 return -1; //原文件不存在
 }
 $waterinfo = @getimagesize($waterImg);
 if (!$waterinfo) {
 return -2; //水印图片不存在
 }
 $srcImgObj = image_create_from_ext($srcImg);
 if (!$srcImgObj) {
 return -3; //原文件图像对象建立失败
 }
 $waterImgObj = image_create_from_ext($waterImg);
 if (!$waterImgObj) {
 return -4; //水印文件图像对象建立失败
 }
 switch ($positon) {
 //1顶部居左
 case 1: $x=$y=0; break;
 //2顶部居右
 case 2: $x = $srcinfo[0]-$waterinfo[0]; $y = 0; break;
 //3居中
 case 3: $x = ($srcinfo[0]-$waterinfo[0])/2; $y = ($srcinfo[1]-$waterinfo[1])/2; break;
 //4底部居左
 case 4: $x = 0; $y = $srcinfo[1]-$waterinfo[1]; break;
 //5底部居右
 case 5: $x = $srcinfo[0]-$waterinfo[0]; $y = $srcinfo[1]-$waterinfo[1]; break;
 default: $x=$y=0;
 }
 imagecopymerge($srcImgObj, $waterImgObj, $x, $y, 0, 0, $waterinfo[0], $waterinfo[1], $alpha);
 switch ($srcinfo[2]) {
 case 1: imagegif($srcImgObj, $savefile); break;
 case 2: imagejpeg($srcImgObj, $savefile); break;
 case 3: imagepng($srcImgObj, $savefile); break;
 default: return -5; //保存失败
 }
 imagedestroy($srcImgObj);
 imagedestroy($waterImgObj);
 return $savefile;
}
function image_create_from_ext($imgfile)
{
 $info = getimagesize($imgfile);
 $im = null;
 switch ($info[2]) {
 case 1: $im=imagecreatefromgif($imgfile); break;
 case 2: $im=imagecreatefromjpeg($imgfile); break;
 case 3: $im=imagecreatefrompng($imgfile); break;
 }
 return $im;
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php下使用以下代码连接并测试
Apr 09 PHP
PHP 调试工具Debug Tools
Apr 30 PHP
PHP 第一节 php简介
Apr 28 PHP
php获取操作系统语言代码
Nov 04 PHP
PHP中替换键名的简易方法示例详解
Jan 07 PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 PHP
php生成验证码函数
Oct 20 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
什么是PHP文件?如何打开PHP文件?
Jun 27 PHP
PHP abstract 抽象类定义与用法示例
May 29 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 PHP
PHP并发场景的三种解决方案代码实例
Feb 27 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
Oct 03 #PHP
PHP实现生成带背景的图形验证码功能
Oct 03 #PHP
php使用CutyCapt实现网页截图保存的方法
Oct 03 #PHP
php+mysql查询实现无限下级分类树输出示例
Oct 03 #PHP
php opendir()列出目录下所有文件的实例代码
Oct 02 #PHP
PHP读MYSQL中文乱码的快速解决方法
Oct 01 #PHP
php简单统计中文个数的方法
Sep 30 #PHP
You might like
php 静态变量的初始化
2009/11/15 PHP
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
javascript读写XML实现广告轮换(兼容IE、FF)
2013/08/09 Javascript
js 针对html DOM元素操作等经验累积
2014/03/11 Javascript
jQuery is()函数用法3例
2014/05/06 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
浅谈Javascript数组索引
2015/07/29 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
JS打印组合功能
2016/08/04 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
如何判断出一个js对象是否一个dom对象
2016/11/24 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
js 原型对象和原型链理解
2017/02/09 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
2019/04/04 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
小程序实现分类页
2019/07/12 Javascript
vue 获取视频时长的实例代码
2019/08/20 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
Python中的pprint折腾记
2015/01/21 Python
Python连接SQLServer2000的方法详解
2017/04/19 Python
Python数据结构与算法之图结构(Graph)实例分析
2017/09/05 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
初一学生期末评语
2014/04/24 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
护理见习报告范文
2014/11/03 职场文书
幼儿园小班教师随笔
2015/08/14 职场文书
uwsgi+nginx代理Django无法访问静态资源的解决
2021/05/10 Servers
Python初识逻辑与if语句及用法大全
2021/08/07 Python
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技