PHP 如何做水印

给图片加水印,既能保护原创内容,又能让自己的标识跟着图片传播,很多做网站、搞设计的朋友都需要这个功能。用PHP就能轻松搞定,不用复杂工具,几步就能实现,咱们用大白话一步步说清楚。

先搞懂PHP加水印的核心原理

咱们平时看到的图片,本质是一堆像素点的组合,每个像素点都有颜色信息,比如红、绿、蓝的数值,还有透明度。PHP的GD库(一个处理图片的工具,PHP一般默认开启,找不到的话在服务器配置里开一下就行)能读取这些像素信息,把自己的文字或图案叠加在原来的图片上,调整透明度、位置,就成了水印。

PHP 如何做水印

举个生活化的例子:你在一张画好的纸上(就是原图),用半透明的印章盖在角落,别人还能看清下面的画,但又多了你的标记,PHP做水印就像这个过程。

第一步:先准备好必要的“材料”

要做水印,得先准备三样东西,都是PHP能直接用的:

  • 要加水印的“原图”:比如你网站上的产品图、风景图,存在服务器的某个文件夹里,比如./images/photo.jpg;
  • 水印内容:可以是文字(比如“我的原创”“XX公司”),也可以是图片水印(比如你的logo小图标,比文字更醒目);
  • PHP处理工具:GD库,刚才说过,大部分服务器都自带,要是用虚拟主机的话,一般在后台就能看到是否开启。

第二步:用PHP做文字水印(最常用的情况)

文字水印是最方便的,适合新手,比如给用户上传的头像、文章配图加个“版权所有”的文字。咱们写一段简单的代码,不用怕看不懂,跟着逻辑走:

  • 先读取原图:比如原图是JPG格式,就用imagecreatefromjpeg()打开;
  • 设置文字样式:比如用什么字体(尽量用服务器自带的字体,避免乱码,比如微软雅黑,路径写./fonts/msyh.ttf)、字号、颜色(比如灰色,透明度设为50,不会太挡原图);
  • 把文字放在合适的位置:一般选右下角,不会挡主要内容,计算一下位置,比如离右边10像素、离底部10像素;

输出加水印后的图,或者保存到服务器。

举个实际的小场景:你开了个美食博客,用户上传了自己做的菜的图片,你要加“XX美食日记”的文字水印,用这段代码就能自动处理,用户上传的图片都会自动加水印,不用手动操作。

第三步:进阶的图片水印(适合logo类)

如果觉得文字太单调,想加个自己的logo图片当水印,逻辑和文字水印差不多,只是把“文字”换成了“图片”:

  • 先读取原图,再读取logo水印图(比如./images/logo.png,要支持透明的PNG格式,这样logo不会有白色背景);
  • 调整logo的大小:别太大,一般设成原图宽度的1/10就好,比如原图宽1000px,logo宽100px;
  • 把logo放在同样的右下角,设置透明度(比如70,既清晰又不突兀);

最后合并两张图片,输出保存。

比如你开了个电商网站,产品图上的logo用图片水印,比文字更醒目,还能展示你的品牌,客户看到产品图就知道是你的店。

注意几个容易踩的小坑

  • 字体路径别写错:如果用自己上传的字体,要确保服务器能找到这个文件,不然会显示不出文字,变成空白;
  • 原图格式要对应:JPG用imagecreatefromjpeg(),PNG用imagecreatefrompng(),GIF用对应函数,要是写错了,图片会打不开;
  • 别挡重点内容:加水印的位置尽量选图片的空白处,比如天空、背景,别挡人或产品,不然用户会反感,反而得不偿失;
  • 大图片别加太密的水印:如果原图是海报、风景图,别在中间加一堆水印,右下角加一个就够,不然会显得杂乱。

其实PHP加水印就是这么简单,不用太复杂的知识,只要搞懂“读取原图→准备水印→合并→输出”这几步,就能满足日常的需求,不管是个人博客还是小型网站,都能自己搞定这个功能。

上一篇 TypeScript 如何做泛型请求封装