给图片加上水印php视频,如何使用PHP给图片加水印-程序员宅基地

技术标签: 给图片加上水印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给图片加文字水印

/*给图片加文字水印的方法*/

$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程序设计有所帮助。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_35075655/article/details/115117771

智能推荐

CGI编程学习5 穿插HTML,CSS零星知识-程序员宅基地

文章浏览阅读127次。今天,看了同学写的HTML代码很糟糕.就自己重写了一下.了解了一些HTML.CSS知识.现记录在这里.先给大家一个比较好的CSS教程网站:http://www.w3school.com.cn/css/index.aspCSS 概述CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示 HTML 元素样式通常存储在样式表中把样式添加..._cgi 生成含有css的html文件

【5G RRC】Master Information Block (NR-MIB)_mib rlc-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏11次。- MIB通过BCH传输信道和PBCH物理信道传输;- QPSK调制;- 它包含了解码 *SystemInformationBlockType1 (SIB1)* 所需的必要参数;- 它的传输周期为80毫秒,在这80毫秒内进行重复传输;- 它在OFDM 的符号1、2、3上传输;- 根据TS 38.211,它在符号1和3上使用0~239的子载波号,而在符号2上,使用0\~47的子载波号和192\~239的子载波号;_mib rlc

连接Oracle数据库时遇到:Listener refused the connection with the following error。。。。_oracle.net.ns.netexception: listener refused the c-程序员宅基地

文章浏览阅读3.8w次。今天在对原来的项目进行运行时,突然程序报出java.sql.SQLException: Listener refused the connection with the following error:ORA-12519, TNS:no appropriate service handler found 这个错误,之前一直运行都是好好的,于是乎,就各种查找相关的解决方法,网上查找到的原_oracle.net.ns.netexception: listener refused the connection with the followi

ros navigation 局部路径算法dwa解析(一)_ros dwa算法源码解析-程序员宅基地

文章浏览阅读5.1k次,点赞8次,收藏43次。继ros里面A*全局规划之后,再解析局部路径算法dwa的整个算法调用过程,至于细节放到后面的章节去写 dwa的整体思路网上有很多相关的资料了https://blog.csdn.net/heyijia0327/article/details/44983551具体的可以参看这一篇博客 本篇文章的话只要是说navigation包里面的调用过程,不关心整体思路前期将局部路径..._ros dwa算法源码解析

白塞氏病遗传吗?-程序员宅基地

文章浏览阅读309次。很多人在白塞氏病的阴影下,迟迟的难以走出,原因就是得不到良好的治疗。这部分患者中有一些是年轻的夫妇,这给打算要孩子的他们无疑带来了很大的困扰。自己本已饱受白塞氏病之苦,如果此时打算要孩子会不会遗传给孩子,让孩子继续这痛苦和折磨?本章就由专家为大家讲解。首先,专家介绍说白塞氏病是一种自身免疫性疾病,临床上以口腔溃疡、生殖器溃疡、眼炎及皮肤损害为突出表现,但是并不会对患者的生殖系统内部产生影响,造成...

python image模块安装_Python库 - PIL 之 Image 模块-程序员宅基地

文章浏览阅读1.5k次。PIL Python包的安装:sudo pip install PillowImage 模块是 PIL 图像处理的一个类,其提供了很多函数,包括图片加载,创建新图片等.例如:图片旋转 45 度:from PIL import Imageimg = Image.open("test.jpg")img.rotate(45).show() #旋转创建缩略图(thumbnails):from PIL i...

随便推点

C#WinForm 打包和部署 -结束篇_vs winform 项目打包 怎么把python打进去-程序员宅基地

文章浏览阅读1k次。1.打开 VS 创建一个 安装项目,如下图:创建成功后,如下图: 2.安装项目的 文件夹介绍及其使用A.应用程序文件夹 : 主要功能,存储需要打包,执行程序,以及资源文件。B.用户的“程序”菜单 :主要功能,左下角windows 快捷方式 存放的地方 C.用户桌面 : 主要功能,用户机器 桌面的快捷方式 存放的地方 3.操作步骤1.配置应用程序文件夹 2.配置应用程序菜单A.添加文件的方法_vs winform 项目打包 怎么把python打进去

FPGA面试真题解析_fpga二进制编码为啥用较多组合逻辑-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏30次。FPGA面试真题解析1、1、 十进制46.25对应的二进制表达式为( )。(硬件逻辑实习岗)A 101110.11 B 101101.01 C 101110.1 D 101110.01解析:这个问题看上去很简单,那是因为我们平时可以打开电脑上的计算器,然后用程序员功能立刻就能出结果,但是笔试的时候我们并不能使用这种“作弊“的功能,所以还是要会手算。可能很多同学数电是大一大二时学习的,很久没有接触过这么基础的问题了,那就让我们一起来回忆下吧。首先这个题_fpga二进制编码为啥用较多组合逻辑

Oracle之sql标准之增删查改子句用法_oracle删除语句带子查询 原理-程序员宅基地

文章浏览阅读1k次。SELECT语句 SELECT [ ALL | DISTINCT { * | expression | column1_name [ , column2_name ] [ , … ] }FROM { table1_name | ( subquery ) } [ alias ][ , { table2_name | ( subquery ) } [ alias ] , … ][ _oracle删除语句带子查询 原理

EPLAN2022——端子_eplan端子排-程序员宅基地

文章浏览阅读7k次,点赞4次,收藏16次。插入——端子——点击端子。选择端子,没别插入到图纸中;勾选多层端子,输入端子层数量;将X5和X6连个端子合并为一个端子排;不同行/列,生成多个端子排;选中端子,可以拖放插入,也可以单个放置;默认端子如果不是想插入的端子,按退格键选择;设备——端子——导航器。或者使用3连接点的端子和4连接点的端子组合;通常选择带鞍型跳线的端子,2个连接点;双击X6——将完整设备标识符修改为X5:2;X5端子排的第二个;已使用端子和未使用端子,端子前的购物车符号不同;如果放置在同一列/行,自动生成为同一个端子排;_eplan端子排

vue入门之面试必问-程序员宅基地

文章浏览阅读683次,点赞6次,收藏18次。Vue是一套构建用户界面的渐进式框架。它与其他大型框架(如React和Angular)一样,都是用于构建用户界面的JavaScript框架。Vue被设计自底向上逐层应用,其核心库只关注视图层,不仅易于上手,也便于与第三方库或已有项目整合。vue还是单⻚面应用程序总而言之vue便是用于构建用户界面的渐进式框架,采用自底向上增量开发的设计。(重点)

面试:史上最全多线程面试题 - (锁&内存模型&线程)_多线程锁面试题-程序员宅基地

文章浏览阅读1.1w次,点赞77次,收藏549次。多线程经典面试题59问。1.什么是活锁、饥饿、无锁、死锁?死锁、活锁、饥饿是关于多线程是否活跃出现的运行阻塞障碍问题,如果线程出现 了这三种情况,即线程不再活跃,不能再正常地执行下去了。死锁死锁是多线程中最差的一种情况,多个线程相互占用对方的资源的锁,而又相互等 对方释放锁,此时若无外力干预,这些线程则一直处理阻塞的假死状态,形成死锁。 举个例子,A 同学抢了 B 同学的钢笔,B 同学..._多线程锁面试题