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 ...
随机推荐
- CentOS 傻瓜式部署uWSGI + nginx + flask
交代背景 这篇帖子是为了提供我自己的July Novel站点的小说数据支撑.解决分布式部署爬虫程序的繁琐过程,由于本人对shell编程并不熟悉,故而先逐步记录操作步骤,通过以下操作达到节省时间的方式. ...
- [Asp.net Mvc]为js,css静态文件添加版本号
方式一: 思路 string version = ViewBag.Version; @Scripts.RenderFormat("<script type=\"text/ja ...
- what eats up the performance in the interior scene?
- baseline (7w rps/core) - switch from large accelerator to regular accelerator (9w rps/core) - repl ...
- django学习篇
https://www.cnblogs.com/alex3714/category/818260.html https://www.cnblogs.com/zhanghongfeng/catego ...
- lua之base64加密和解密算法。
local function encodeBase64(source_str) local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnop ...
- iOS开发其他相关
1.iOS开发行情 1.1 iOS系统各个版本的占比查询 2.Xcode的使用 开发软件下载 Xcode Help(官方) 2.1 Xcode面板 Xcode面板 2.2 Xcode版本新功能 Xco ...
- numpy数组 拼接
转载自:https://blog.csdn.net/zyl1042635242/article/details/43162031 数组拼接方法一 首先将数组转成列表,然后利用列表的拼接函数append ...
- input获取、失去焦点对输入内容做验证
获取焦点 # 重新获取焦掉后,会将指定标签中的css样式删除,这里为标记错误的css样式(将文本框标红) $("form input").focus(function () { $ ...
- OCP 12c最新考试原题及答案(071-3)
3.(4-10) choose the best answer:The user SCOTT who is the owner of ORDERS and ORDER_ITEMS tables iss ...
- “全栈2019”Java第四十章:this关键字
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...