如何使用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 文件上传代码(限制jpg文件)
Jan 05 PHP
php+js实现异步图片上传实例分享
Jun 02 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
php遍历删除整个目录及文件的方法
Mar 13 PHP
PHP实现的memcache环形队列类实例
Jul 28 PHP
前端必学之PHP语法基础
Jan 01 PHP
php实现按天数、星期、月份查询的搜索框
May 02 PHP
PHP中快速生成随机密码的几种方式
Apr 17 PHP
PHP 网站修改默认访问文件的nginx配置
May 27 PHP
PHP与SQL语句写一句话木马总结
Oct 11 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
Dec 12 PHP
TP5框架实现上传多张图片的方法分析
Mar 29 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更快的提供文件下载的代码
2012/06/13 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
常用的javascript function代码
2008/05/23 Javascript
javascript中打印当前的时间实现思路及代码
2013/12/18 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
javascript的函数作用域
2014/11/12 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
JS获取图片lowsrc属性的方法
2015/04/01 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
Vue.js实战之组件的进阶
2017/04/04 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
微信小程序iOS下拉白屏晃动问题解决方案
2019/10/12 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
jQuery实现计算器功能
2020/10/19 jQuery
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
深入解析Python中的集合类型操作符
2015/08/19 Python
python实现杨氏矩阵查找
2019/03/02 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
英国受欢迎的运动鞋和街头服装商店:Footasylum
2018/06/12 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
小学雷锋月活动总结
2014/07/03 职场文书
交通事故调解协议书
2015/05/20 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
Python中的套接字编程是什么?
2021/06/21 Python
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis