<?php

/**
*图片加水印
*@param $srcImg 原图
*@param $waterImg 水印图片
*@param $savepath 保存路径
*@param $savename 保存名字
*@param $position 水印位置
*1:左上 2:右上 3:居中 4:左下 5:右下
*@param $opacity 透明度
*0:全透明 100:完全不透明
*@return 成功 -- 加水印后的新图片地址
* 失败 -- -1:源文件不存在,-2:水印不存在,-3源文件图片对象建立失败,-4:水印文件图像对象建立失败,-5:加水印后的新图片保存失败
* 获取源文件路径、宽高等信息,得出保存后文件保存路径、水印放置位置->建立源文件和水印图片对象->合并图片对象(imagecopymerge)->销毁图片对象
*/ function img_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;
} function img_water_mark($srcImg, $waterImg, $savepath=null, $savename=null, $position=5, $opacity=50){
$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 = img_create_from_ext($srcImg);
if(!$srcImgObj){
return -3;
}
$waterImgObj = img_create_from_ext($waterImg);
if(!$waterImgObj){
return -4;
}
switch ($position) {
case 1:
$x=$y=0;
break;
case 2:
$x=$srcinfo[0] - $waterinfo[0];
$y=0;
break;
case 3:
$x=($srcinfo[0] - $waterinfo[0])/2;
$y=($srcinfo[1] - $waterinfo[1])/2;
break;
case 4:
$x=0;
$y=$srcinfo[1] - $waterinfo[1];
break;
case 5:
$x=$srcinfo[0] - $waterinfo[0];
$y=$srcinfo[1] - $waterinfo[1];
break;
}
// 合并图片+水印
imagecopymerge($srcImgObj, $waterImgObj, $x, $y, 0, 0, $waterinfo[0], $waterinfo[1], $opacity); 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;
} ?>

PHP给图片加水印的更多相关文章

  1. 火车头dede采集接口,图片加水印,远程图片本地化,远程无后缀的无图片本地化

    <?php /* [LocoySpider] (C)2005-2010 Lewell Inc. 火车采集器 DedeCMS 5.7 UTF8 文章发布接口 Update content: 图片加 ...

  2. thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印

    今天分享一下thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印.博主是新手,在这里卡住了很久(>_<) thinkphp 3.2.3整合ueditor 1.4 下载 ...

  3. PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转

    [强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...

  4. php 分享两种给图片加水印的方法

    本文章向码农们介绍 php 给图片加水印的两种方法,感兴趣的码农可以参考一下本文章的源代码. 方法一:PHP最简单的加水印方法 <?php // http://www.manongjc.com ...

  5. Java图片处理(二)图片加水印

    图片加水印,是通过图片重叠绘制实现的.实现代码如下: public static void press(String pressImg, String pressText, String target ...

  6. 如何用node.js批量给图片加水印

    上一篇我们讲了如何用node.js给图片加水印,但是只是给某一张图片加,并没有涉及到批量处理.这一篇,我们学习如果批量进行图片加水印处理. 一.准备工作: 首先,你要阅读完这篇文章:http://ww ...

  7. 使用 ImageEnView 给图片加水印,及建缩略图

    摘要: 使用 ImageEnView 给图片加水印,及建缩略图 {Power by hzqghost@21cn.com}unit CutWater; interface uses  Math,imag ...

  8. php对图片加水印--将图片先缩小,再在上面加水印

    方法: /**  * 图片加水印(适用于png/jpg/gif格式)  *  * @author flynetcn  *  * @param $srcImg  原图片  * @param $water ...

  9. php对图片加水印--将文字作为水印加到图片

    方法代码: /**  * 图片加水印(适用于png/jpg/gif格式)  *  * @author flynetcn  *  * @param $srcImg  原图片  * @param $wat ...

随机推荐

  1. python - class类 (一)

    三大编程范式 1.面向过程 2.函数式 3.面向对象 注意 编程范式没有高低之分,只有适用不适用. 面向对象编程: 编程是程序源用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一 ...

  2. 2017-2018-2 165X 『Java程序设计』课程 助教总结

    2017-2018-2 165X 『Java程序设计』课程 助教总结 本学期完成的助教工作主要包括: 编写300道左右测试题,用于蓝墨云课下测试: 发布博客三篇:<2017-2018-2 165 ...

  3. Your Database is downloaded and backed up on....(腾讯云的mysql被攻击)

    今天发现自己的服务器被黑客攻击,自己的mysql服务器的库被删掉,并且新创了一个warning库,只有一个readme表.不知道原因,也许是自己再github上的项目暴漏了自己的密码,还要0.6比特币 ...

  4. 利用capability特征加强Linux系统安全【转】

    转自:https://blog.csdn.net/fivedragon/article/details/676849 1.简介 UNIX是一种安全操作系统,它给普通用户尽可能低的权限,而把全部的系统权 ...

  5. Python3学习笔记20-获取对象信息

    当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 基本类型都可以用type()判断: print(type(123)) print(type('str')) print(type ...

  6. 生成ansible-playbook的yaml文件的代码(字典排序问题无法解决)

    import yaml import collections def add_task(): return None def add_vars(): return None def add_handl ...

  7. 【转】C Runtime Library的来历

    由于我看到的文章也是转载且未提供原文链接,所以这里没有提供原文链接! msvcrt.dll(名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy ...

  8. js 、c# 编码解码

    escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@ ...

  9. 同时装了Python3和Python2,怎么用pip

    作者:匿名用户链接:https://www.zhihu.com/question/21653286/answer/95532074来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  10. 从html页面中抽取table表格数据

    /** * [getDataFromTrElems 获取表格行元素数据] * @param {[Object]} trElems [trs dom] * @param {[String]} type ...