PHP给图片加水印具体实现
给图片加水印实现方法如下:
class Mark
{
public function __construct()
{ } /**
* 加水印
* @param file $srcImg 要加水印的图片
* @param file $waterImg 水印图片
* @param integer $position 水印图片放置位置 1:左上,2:右上,3:居中,4:左下,5:右下
* @param integer $alpha 水印图片透明度 0-100
* @return resource 返回加水印后的图像资源
*/
public function waterMark($srcImg, $waterImg, $position=5, $alpha)
{
/**
* 获取原图及水印图的宽高值(px)
* @var [type]
*/
$srcImgInfo = @getimagesize($srcImg);
if(!$srcImgInfo) return FALSE;
$srcW = $srcImgInfo[0];
$srcH = $srcImgInfo[1]; $waterInfo = @getimagesize($waterImg);
if (!$waterInfo)return FALSE;//水印图片不存在或路径错误
$waterW = $waterInfo[0];//宽度
$waterH = $waterInfo[1];//高度 /**
* 生成图像资源
* @var [type]
*/
$srcImgObj = $this->imageCreateFromExt($srcImg);
if (!$srcImgObj) return FALSE; $waterImgObj = $this->imageCreateFromExt($waterImg);
if (!$waterImgObj) return FALSE;
//计算水印的位置
switch ($position)
{
//1顶部居左
case 1:
$srcX = $srcY = 0;
break;
//2顶部居右
case 2:
$srcX = $srcW - $waterW;
$srcY = 0;
break;
//3居中
case 3:
$srcX = ($srcW -$waterW)/2;
$srcY = ($srcH -$waterH)/2;
break;
//4底部居左
case 4:
$srcX = 0;
$srcY = $srcH -$waterH;
break;
//5底部居右
case 5:
$srcX = $srcW - $waterW;
$srcY = $srcH - $waterH;
break;
default:
$srcX = $srcY = 0;
}
//合并原图和水印图片
imagecopymerge($srcImgObj, $waterImgObj, $srcX, $srcY, 0, 0, $waterW, $waterH, $alpha);
imagedestroy($waterImgObj);//关闭水印图像资源
//返回合并后的图像资源,外部得到图像资源后可直接输出到浏览器也可保存成图片文件
return $srcImgObj;
} /**
* 根据提供的原图格式创建新图像资源
* @param file $imgfile
* @return Ambigous <NULL, resource>
*/
private function imageCreateFromExt($imgfile)
{
//获取图片的格式;格式:1、gif,2、jpg,3、png
$imageType = getimagesize($imgfile)[2];
$im = null;
switch ($imageType) {
case 1:
$im = imagecreatefromgif($imgfile);
break;
case 2:
$im = imagecreatefromjpeg($imgfile);
break;
case 3:
$im = imagecreatefrompng($imgfile);
break;
default:
$im = imagecreatefrompng($imgfile);
}
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 ...
随机推荐
- Unresolved import *** (models) error on Eclipse
Eclipse version: Oxygen.2 Release (4.7.2) Python version: 3.6 问题:系统提示:from django.db import models 语 ...
- (转)关于block使用的5点注意事项
1.在使用block前需要对block指针做判空处理. 不判空直接使用,一旦指针为空直接产生崩溃. if (!self.isOnlyNet) { if (succBlock == NULL) { // ...
- hadoop压缩和解压
最近有一个hadoop集群上的备份需求.源文件有几百G,如果直接复制太占用磁盘空间.将文件从hadoop集群下载到本地,压缩之后再上传到hadoop则太耗时间.于是想到能否直接在HDFS文件系统上进行 ...
- Leetcode 001. 两数之和(扩展)
1.题目要求 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 2.解法一:暴力法(for*for,O(n*n)) ...
- hdu 4903 The only survival
The only survival http://acm.hdu.edu.cn/showproblem.php?pid=4903 Time Limit: 40000/20000 MS (Java/Ot ...
- 数学:Burnside引理与Pólya定理
这个计数定理在考虑对称的计数中非常有用 先给出这个定理的描述,虽然看不太懂: 在一个置换群G={a1,a2,a3……ak}中,把每个置换都写成不相交循环的乘积. 设C1(ak)是在置换ak的作用下不动 ...
- C11简洁之道:循环的改善
1. for循环的新用法 在C++98/03中,通过for循环对一个容器进行遍历,一般有两种方法,常规的for循环,或者使用<algorithm>中的for_each方法. for循环遍 ...
- log4net 性能测试
1.执行事务:20260 次 写日志: 耗时11.59分 不写日志: 耗时11.55分 异步日志: 耗时12.49分 (个人电脑,.net 线程池调用线程写日志可能比主线程直 ...
- 【hdu5381】维护区间内所有子区间的gcd之和-线段树
题意:给定n个数,m个询问,每次询问一个区间内所有连续子区间的gcd的和.n,m<=10^5 题解: 这题和之前比赛的一题很像.我们从小到大枚举r,固定右端点枚举左端点,维护的区间最多只有log ...
- 「6月雅礼集训 2017 Day11」delight
[题目大意] 有$n$天,每天能吃饭.睡觉.什么事也不干 每天吃饭的愉悦值为$e_i$,睡觉的愉悦值为$s_i$,什么都不干愉悦值为0. 要求每连续$k$天都要有至少$E$天吃饭,$S$天睡觉. 求最 ...