技术标签: 给图片加上水印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程序设计有所帮助。
文章浏览阅读127次。今天,看了同学写的HTML代码很糟糕.就自己重写了一下.了解了一些HTML.CSS知识.现记录在这里.先给大家一个比较好的CSS教程网站:http://www.w3school.com.cn/css/index.aspCSS 概述CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示 HTML 元素样式通常存储在样式表中把样式添加..._cgi 生成含有css的html文件
文章浏览阅读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
文章浏览阅读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
文章浏览阅读5.1k次,点赞8次,收藏43次。继ros里面A*全局规划之后,再解析局部路径算法dwa的整个算法调用过程,至于细节放到后面的章节去写 dwa的整体思路网上有很多相关的资料了https://blog.csdn.net/heyijia0327/article/details/44983551具体的可以参看这一篇博客 本篇文章的话只要是说navigation包里面的调用过程,不关心整体思路前期将局部路径..._ros dwa算法源码解析
文章浏览阅读309次。很多人在白塞氏病的阴影下,迟迟的难以走出,原因就是得不到良好的治疗。这部分患者中有一些是年轻的夫妇,这给打算要孩子的他们无疑带来了很大的困扰。自己本已饱受白塞氏病之苦,如果此时打算要孩子会不会遗传给孩子,让孩子继续这痛苦和折磨?本章就由专家为大家讲解。首先,专家介绍说白塞氏病是一种自身免疫性疾病,临床上以口腔溃疡、生殖器溃疡、眼炎及皮肤损害为突出表现,但是并不会对患者的生殖系统内部产生影响,造成...
文章浏览阅读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...
文章浏览阅读1k次。1.打开 VS 创建一个 安装项目,如下图:创建成功后,如下图: 2.安装项目的 文件夹介绍及其使用A.应用程序文件夹 : 主要功能,存储需要打包,执行程序,以及资源文件。B.用户的“程序”菜单 :主要功能,左下角windows 快捷方式 存放的地方 C.用户桌面 : 主要功能,用户机器 桌面的快捷方式 存放的地方 3.操作步骤1.配置应用程序文件夹 2.配置应用程序菜单A.添加文件的方法_vs winform 项目打包 怎么把python打进去
文章浏览阅读2.4k次,点赞2次,收藏30次。FPGA面试真题解析1、1、 十进制46.25对应的二进制表达式为( )。(硬件逻辑实习岗)A 101110.11 B 101101.01 C 101110.1 D 101110.01解析:这个问题看上去很简单,那是因为我们平时可以打开电脑上的计算器,然后用程序员功能立刻就能出结果,但是笔试的时候我们并不能使用这种“作弊“的功能,所以还是要会手算。可能很多同学数电是大一大二时学习的,很久没有接触过这么基础的问题了,那就让我们一起来回忆下吧。首先这个题_fpga二进制编码为啥用较多组合逻辑
文章浏览阅读1k次。SELECT语句 SELECT [ ALL | DISTINCT { * | expression | column1_name [ , column2_name ] [ , … ] }FROM { table1_name | ( subquery ) } [ alias ][ , { table2_name | ( subquery ) } [ alias ] , … ][ _oracle删除语句带子查询 原理
文章浏览阅读7k次,点赞4次,收藏16次。插入——端子——点击端子。选择端子,没别插入到图纸中;勾选多层端子,输入端子层数量;将X5和X6连个端子合并为一个端子排;不同行/列,生成多个端子排;选中端子,可以拖放插入,也可以单个放置;默认端子如果不是想插入的端子,按退格键选择;设备——端子——导航器。或者使用3连接点的端子和4连接点的端子组合;通常选择带鞍型跳线的端子,2个连接点;双击X6——将完整设备标识符修改为X5:2;X5端子排的第二个;已使用端子和未使用端子,端子前的购物车符号不同;如果放置在同一列/行,自动生成为同一个端子排;_eplan端子排
文章浏览阅读683次,点赞6次,收藏18次。Vue是一套构建用户界面的渐进式框架。它与其他大型框架(如React和Angular)一样,都是用于构建用户界面的JavaScript框架。Vue被设计自底向上逐层应用,其核心库只关注视图层,不仅易于上手,也便于与第三方库或已有项目整合。vue还是单⻚面应用程序总而言之vue便是用于构建用户界面的渐进式框架,采用自底向上增量开发的设计。(重点)
文章浏览阅读1.1w次,点赞77次,收藏549次。多线程经典面试题59问。1.什么是活锁、饥饿、无锁、死锁?死锁、活锁、饥饿是关于多线程是否活跃出现的运行阻塞障碍问题,如果线程出现 了这三种情况,即线程不再活跃,不能再正常地执行下去了。死锁死锁是多线程中最差的一种情况,多个线程相互占用对方的资源的锁,而又相互等 对方释放锁,此时若无外力干预,这些线程则一直处理阻塞的假死状态,形成死锁。 举个例子,A 同学抢了 B 同学的钢笔,B 同学..._多线程锁面试题