如何使用PHP给图片加水印


Posted in PHP onOctober 12, 2016

为了防止辛苦做出来的图片被盗用,很多照片都会加上水印,可以直接用图片工具添加水印再上传,但PHP中就可以实现给图片加水印的功能,本文章向码农们介绍 php 给图片加水印的两种方法,感兴趣的码农可以参考一下本文章的源代码。

方法一:PHP最简单的加水印方法

<?php
$img = imagecreatefromjpeg($filename);
$logo = imagecreatefromjpeg($filename);
/*imagecraetefromjpeg-由文件或URL创建一个新图像
imagecreatefromjpeg(string $filename)
如果启用了fopen包装器,URL可以作为文件名*/
imagecopy($img,$logo,15,15,0,0,$width,$height);
/*imagecopy($dst_im,$src_im,$dst_x,$dst_y,$src_x,$src_y,$src_w,$src_h)
$dst_im是背景图像,就是需要添加水印的图片
$src_im是水印图片;$dst_x,#dst_y需要把水印放到背景图片的(x,y)坐标;
$src_x,$src_y是截取水印的图片的开始坐标
$width,$height是截取的图片的就是水印的长度和宽度*/
$url = 'http://www.stchat.cn/data/attachment/forum/201506/12/100759pidbdaydh8dy7iby.jpg';
$content = file_get_contents($url);//把url写入到content这个变量里面
/*file_get_contents--将整个文件读入到一个字符串*/
$filename = 'tmp.jpg';
file_put_contents($filename,$content);
//把所有内容放到filename这个变量里面,第一个存放的是背景图片
/*file_put_contents(string $filename,mixed $data)将一个字符串写入一个文件
filename要被写入数据的文件名
data要写入的数据,类型可以是string,array或者是stream资源*/
$url = '';
file_put_contents('logo.png',file_get_contents($url));
//第二个是水印的图片
$img = imagecreatefromjpeg($filename);
$logo = imagecreatefrompng('logo.png');
$size = getimagesize('logo.png');
/*getimagesize()获得图像大小*/
imagecopy($img,$logo,15,15,0,0,$size[0],$size[1]);
header("centent-type:image/jpeg");
imagejpeg(img);
?>

方法二:php给图片加文字水印

<?php
/*给图片加文字水印的方法*/
$dst_path = 'http://f4.topitme.com/4/15/11/1166351597fe111154l.jpg';
$dst = imagecreatefromstring(file_get_contents($dst_path));
/*imagecreatefromstring()--从字符串中的图像流新建一个图像,返回一个图像标示符,其表达了从给定字符串得来的图像
图像格式将自动监测,只要php支持jpeg,png,gif,wbmp,gd2.*/
$font = './t1.ttf';
$black = imagecolorallocate($dst, 0, 0, 0);
imagefttext($dst, 20, 0, 10, 30, $black, $font, 'Hello world!');
/*imagefttext($img,$size,$angle,$x,$y,$color,$fontfile,$text)
$img由图像创建函数返回的图像资源
size要使用的水印的字体大小
angle(角度)文字的倾斜角度,如果是0度代表文字从左往右,如果是90度代表从上往下
x,y水印文字的第一个文字的起始位置
color是水印文字的颜色
fontfile,你希望使用truetype字体的路径
http://www.manongjc.com/article/1302.html */
list($dst_w,$dst_h,$dst_type) = getimagesize($dst_path);
/*list(mixed $varname[,mixed $......])--把数组中的值赋给一些变量
像array()一样,这不是真正的函数,而是语言结构,List()用一步操作给一组变量进行赋值*/
/*getimagesize()能获取到什么信息?
getimagesize函数会返回图像的所有信息,包括大小,类型等等*/
switch($dst_type){
 case 1://GIF
 header("content-type:image/gif");
 imagegif($dst);
 break;
 case 2://JPG
 header("content-type:image/jpeg");
 imagejpeg($dst);
 break;
 case 3://PNG
 header("content-type:image/png");
 imagepng($dst);
 break;
 default:
 break;
 /*imagepng--以PNG格式将图像输出到浏览器或文件
 imagepng()将GD图像流(image)以png格式输出到标注输出(通常为浏览器),或者如果用filename给出了文件名则将其输出到文件*/
}
imagedestroy($dst);
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP制作静态网站的模板框架(一)
Oct 09 PHP
php中文字母数字验证码实现代码
Apr 25 PHP
php中使用DOM类读取XML文件的实现代码
Dec 14 PHP
递归删除一个节点以及该节点下的所有节点示例
Mar 19 PHP
php强大的时间转换函数strtotime
Feb 18 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 PHP
通过PHP设置BugFree获取邮箱通知
Apr 25 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 PHP
php版微信数据统计接口用法示例
Oct 12 #PHP
php版微信js-sdk支付接口类用法示例
Oct 12 #PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
Oct 12 #PHP
如何使用php等比例缩放图片
Oct 12 #PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 #PHP
php实现的SSO单点登录系统接入功能示例分析
Oct 12 #PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 #PHP
You might like
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
PHP7 新增常量
2021/03/09 PHP
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
深入探究AngularJS框架中Scope对象的超级教程
2016/01/04 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
JQuery Ajax WebService传递参数的简单实例
2016/11/02 Javascript
Bootstrap输入框组件简单实现代码
2017/03/06 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
使用Python编写简单的画图板程序的示例教程
2015/12/08 Python
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
django连接mysql配置方法总结(推荐)
2018/08/18 Python
python学生信息管理系统(初级版)
2018/10/17 Python
python实现键盘控制鼠标移动
2020/11/27 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
超实用的 30 段 Python 案例
2019/10/10 Python
使用PyTorch训练一个图像分类器实例
2020/01/08 Python
python中K-means算法基础知识点
2021/01/25 Python
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
zooplus波兰:在线宠物店
2019/07/21 全球购物
财务助理岗位职责
2013/11/10 职场文书
采购部岗位职责
2013/11/24 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
win11如何查看端口是否被占用? Win11查看端口是否占用的技巧
2022/04/05 数码科技