php 图片加水印插件
问题:背景透明的水印图片,在加到原图上后不显示,待解决


- <?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:加水印后的新图片保存失败
- */
- img_water_mark('15.png','shuiyin.png');
- function img_water_mark($srcImg, $waterImg, $savepath=null, $savename=null, $positon=5, $alpha=100)
- {
- $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 图片加水印插件的更多相关文章
- 火车头dede采集接口,图片加水印,远程图片本地化,远程无后缀的无图片本地化
<?php /* [LocoySpider] (C)2005-2010 Lewell Inc. 火车采集器 DedeCMS 5.7 UTF8 文章发布接口 Update content: 图片加 ...
- thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印
今天分享一下thinkphp 3.2.3整合ueditor 1.4,给上传的图片加水印.博主是新手,在这里卡住了很久(>_<) thinkphp 3.2.3整合ueditor 1.4 下载 ...
- PHPThumb处理图片,生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转
[强烈推荐]下载地址(github.com/masterexploder/PHPThumb). 注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意. 在网站建设过 ...
- php 分享两种给图片加水印的方法
本文章向码农们介绍 php 给图片加水印的两种方法,感兴趣的码农可以参考一下本文章的源代码. 方法一:PHP最简单的加水印方法 <?php // http://www.manongjc.com ...
- Java图片处理(二)图片加水印
图片加水印,是通过图片重叠绘制实现的.实现代码如下: public static void press(String pressImg, String pressText, String target ...
- PHP给图片加水印
<?php /** *图片加水印 *@param $srcImg 原图 *@param $waterImg 水印图片 *@param $savepath 保存路径 *@param $savena ...
- 如何用node.js批量给图片加水印
上一篇我们讲了如何用node.js给图片加水印,但是只是给某一张图片加,并没有涉及到批量处理.这一篇,我们学习如果批量进行图片加水印处理. 一.准备工作: 首先,你要阅读完这篇文章:http://ww ...
- 使用 ImageEnView 给图片加水印,及建缩略图
摘要: 使用 ImageEnView 给图片加水印,及建缩略图 {Power by hzqghost@21cn.com}unit CutWater; interface uses Math,imag ...
- php对图片加水印--将图片先缩小,再在上面加水印
方法: /** * 图片加水印(适用于png/jpg/gif格式) * * @author flynetcn * * @param $srcImg 原图片 * @param $water ...
- php对图片加水印--将文字作为水印加到图片
方法代码: /** * 图片加水印(适用于png/jpg/gif格式) * * @author flynetcn * * @param $srcImg 原图片 * @param $wat ...
随机推荐
- 关于Intent Uri页面跳转
android browser支持支持Intent Scheme URL语法的可以在wrap页面加载或点击时,通过特定的intent uri链接可以打开对应app页面,例如 <a href=&q ...
- Python实现XX短视频加密算法抓包分析及刷邀请
Python实现XX短视频加密算法抓包分析及刷邀请 出自:https://zhuanlan.zhihu.com/p/466929667?utm_id=0 Python彳余 一个会常常更新互联网,编程的 ...
- 使用elasticsearch-head修改一个索引的副本数
一.背景 有一个很久以前设置的无副本索引放入了ES集群中,为了提升该索引的稳定性,需要添加一个副本 尝试curl方法失败以及因为es版本太旧(低于5.0.0)用不了kibana,并且用Python修改 ...
- 在Linux中实现打印目录程序遇到问题及解决
今日阅读Linux程序设计第四版时,书中给出了一段实例代码,功能为实现/home目录下各级目录结构,当然不一定非得是/home下目录才可以,任何一级目录都可以. 自己尝试在Ubuntu系统运行编译,实 ...
- [UnityShader]unity中2D Sprite显示阴影和接受阴影
首先是效果 要让2D显示阴影,首先假设知道Unity阴影来源(shader中的ShadowCaster) 最简单的方法是,首先从官网下载Sprite-Default.Shader,查看源码 然后复制粘 ...
- (面试题) 面试官:如何在forEach的循环里使用break
大家都知道 js 的 forEach里是不能使用break.但是为什么不能在forEach里使用呢?在forEach里使用break 会发生什么呢? 一. 在forEach里使用break 会发生什么 ...
- Mysql压缩包版本安装
之前一直使用的是安装包,今天懒得去下载了,直接用压缩包安装,记录一下. 1.先去官网下载压缩包.https://dev.mysql.com/downloads/mysql/8.0.html 2.将文件 ...
- lombok.config
# 声明该配置文件是一个根配置文件,从该配置文件所在的目录开始扫描 config.stopBubbling=true # 全局配置 equalsAndHashCode 的 callSuper 属性为t ...
- PostgreSQL权限管理
一旦一个对象被创建,它会被分配一个所有者.所有者通常是执行创建语句的角色.对于大部分类型的对象,初始状态下只有所有者(或者超级用户)能够对该对象做任何事情.为了允许其他角色使用它,必须分配权限. 1 ...
- 使用Libusb测试USB device
一. 先准备好测试工具 -- Libusb: 在Linux中使用的话: 首先从 http://www.libusb.org/官网中下载libusb 然后解压之后./configure --> m ...