php对图片加水印--将一张图片作为水印加到另一张图片
代码如下:
/**
* 图片加水印(适用于png/jpg/gif格式)
*
* @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 water_mark($srcImg, $waterImg, $savepath=null, $savename=null, $positon=1, $alpha=50){
//判断文件是否存在
$srcImgInfo = @getimagesize($srcImg);
if(!$srcImgInfo){
return -1;
}
$waterImgInfo = @getimagesize($waterImg);
if(!$waterImgInfo){
return -1;
} //建立图像对象
$srcImgObj = image_create_from_ext($srcImg, $srcImgInfo[2]);
if(!$srcImgObj){
return -3; //原文件图像对象建立失败
}
$waterImgObj = image_create_from_ext($waterImg, $waterImgInfo[2]);
if(!$waterImgObj){
return -4; //原文件图像对象建立失败
} //准备信息:保存路径,保存文件名
$temp = pathinfo($srcImg);
$name = $temp['basename'];
$path = $temp['dirname'];
$ext = $temp['extension'];
$savename = $savename ? $savename : $name;
$savepath = $savepath ? $savepath : $path;
$savefile = $savepath .'/'. $savename; //确定生成水印的位置
switch($positon){
//1顶部居左
case 1:
$x=$y=0;
break;
//2顶部居右
case 2:
$x = $srcImgInfo[0]-$waterImgInfo[0]; $y = 0;
break;
//3居中
case 3:
$x = ($srcImgInfo[0]-$waterImgInfo[0])/2; $y = ($srcImgInfo[1]-$waterImgInfo[1])/2;
break;
//4底部居左
case 4:
$x = 0; $y = $srcImgInfo[1]-$waterImgInfo[1];
break;
//5底部居右
case 5:
$x = $srcImgInfo[0]-$waterImgInfo[0]; $y = $srcImgInfo[1]-$waterImgInfo[1];
break;
default:
$x=$y=0;
} //添加水印图片
imagecopymerge($srcImgObj, $waterImgObj, $x, $y, 0, 0, $srcImgInfo[0]/2, $srcImgInfo[1]/2, $alpha);
//输出图片
switch ($srcImgInfo[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; }
/*
* 创建图像对象
* @param $imgFile 图片路径
* @param $imgExt 图片扩展名
* @return $im 图像对象
**/
function image_create_from_ext($imgFile, $imgExt){
$im = null;
switch ($imgExt) {
case 1:
$im=imagecreatefromgif($imgFile);
break;
case 2:
$im=imagecreatefromjpeg($imgFile);
break;
case 3:
$im=imagecreatefrompng($imgFile);
break;
}
return $im;
}
调用方法:
//调用测试
$res = water_mark('F:\test\test1.jpg', 'F:\test\logo.png', null, 'res.jpg');
var_dump($res);
php对图片加水印--将一张图片作为水印加到另一张图片的更多相关文章
- php给一张图片加上水印效果
<?php /** * 功能:给一张图片加上水印效果 * $i 要加水印效果的图片 * $t 水印文字 * $size 文字大小 * $pos 水印的位置 * $color 文字的颜色 * $f ...
- C#图片处理高级应用(裁剪,缩放,清晰度,水印)
转自:http://wu-jian.cnblogs.com/ 前言 需求源自项目中的一些应用,比如相册功能,通常用户上传相片后我们都会针对该相片再生成一张缩略图,用于其它页面上的列表显示.随便看一下, ...
- js图片加载效果(延迟加载+瀑布流加载)
概述 两种图片加载的效果:一种是遇到图片较多时,带读条效果的加载提示:另一种是根据滑块的位置进行预加载,用户不察觉的情况下,实现瀑布流的加载效果 详细 代码下载:http://www.demodash ...
- 【JavaScript】使用纯JS实现多张图片的懒加载(附源码)
一.效果图如下 上面的效果图,效果需求如下 1.还没加载图片的时候,默认显示加载图片背景图 2.刚开始进入页面,自动加载第一屏幕的图片 3.下拉界面,当一张图片容器完全显露出屏幕,即刻加载图片,替换背 ...
- PHP实现图片的等比缩放和Logo水印功能示例
文章来自于:脚本之家 文章链接:https://www.jb51.net/article/112909.htm 这篇文章主要介绍了PHP实现图片的等比缩放和Logo水印功能,结合实例形式分析了php图 ...
- 转载:用Jquery实现的图片预加载技术,可以实现有序加载和无序加载!
一.背景 我们在做页面的时候,从用户体验的角度出发,肯定是希望用户以最快的速度看到完整的页面信息,但在实际情况中经常会遇到些问题. 比如受网速影响,页面加载素材的时间比较长,页面会出现短时间的错乱或者 ...
- 使用 jQuery 中的淡入淡出动画,实现图片的轮播效果,每隔 2 秒钟切换一张图片,共 6 张图片
查看本章节 查看作业目录 需求说明: 使用 jQuery 中的淡入淡出动画,实现图片的轮播效果,每隔 2 秒钟切换一张图片,共 6 张图片,切换到第 6 张后从头开始切换,在图片的下方显示 6 个小圆 ...
- lazyload懒加载和swiper轮播懒加载的用法
对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度,比如商城网页. lazyload使用方法: 载入 JavaScript 文件: <script src="jquer ...
- wan口mac=lan口mac加一,wlan是lan口mac加二
(1)路由器有两个mac地址,一个用于外网(wan),一个用于内网(wlan和lan): (2)一般路由器上面或者配置路由器的网页上面只标注外网的mac地址: (3)内网的mac地址和外网mac地址一 ...
- Activity的生命周期与加载模式——Activity的4种加载模式
配置Activity时可指定android:launchMode属性,该属性用于配置该Activity的加载模式,该属性支持如下4个属性值. standard:标准模式,这是默认的加载模式. sing ...
随机推荐
- table.insert(tableName, v)
self.teammateList = {} for i=1,3 do local teammate = UI.CreateLuaWidget("Widget_TeammateInfo&qu ...
- docker swarm 命令
初始化swarm manager并制定网卡地址 docker swarm init --advertise-addr 192.168.10.117 强制删除集群,如果是manager,需要加–forc ...
- 【QTP专题】05_参数化之Excel
QTP使用外部Excel实现参数化主要有以下两种方式 导入到DataTable中 Syntax:DataTable.ImportSheet(FileName, SheetSource, SheetDe ...
- “全栈2019”Java第十二章:变量
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- SP2666 QTREE4 - Query on a tree IV(LCT)
题意翻译 你被给定一棵n个点的带边权的树(边权可以为负),点从1到n编号.每个点可能有两种颜色:黑或白.我们定义dist(a,b)为点a至点b路径上的权值之和. 一开始所有的点都是白色的. 要求作以下 ...
- php数据库编程---mysqli扩展库
1,mysqli扩展库允许我们访问MySQL数据库,并对MySql数据库进行curd操作.Mysqli扩展库比mysql扩展库加强了. 2,mysqli扩展库和mysql扩展库的比较 (1) mysq ...
- 剑指offer35题:第一个只出现一次的字符+剑指offer55题:字符流中第一个不重复的字符+剑指offer51题:数组中重复的数字
在看剑指offer的时候,感觉这三个题目很像,都是用哈希表可以解决,所以把这三个题整理出来,以供复习. 剑指offer35题:第一个只出现一次的字符 题目描述:在字符串中找出第一个只出现一次的字符.如 ...
- 磁盘磁盘MBR与GPT的区别
基本磁盘与动态磁盘 磁盘的使用方式可以分为两类:一类是“基本磁盘”.基本磁盘非常常见,我们平时使用的磁盘类型基本上都是“基本磁盘”.“基本磁盘”受26个英文字母的限制,也就是说磁盘的盘符只能是2 ...
- weex 自定义Modul
扩展iOS的功能 一. 新建 NSOjbect 子类, 并遵循协议<WXModuleProtocol> .h 代码 #import <Foundation/Foundation.h& ...
- Jmeter打开url时提示“请在微信客户端打开链接问题”
前提: 1.HTTP信息头管理器已添加了“User-Agent” 2.工作台添加HTTP代理服务器(注意端口和客户端填写的代理端口要一致) 但是运行的时候总是提示“请在微信客户端打开链接” 查阅各种资 ...