用php画布给图片加上文字水印并输出成png、jpg图片

版权声明:本文为CSDN博主「梦小白」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。

有一个项目因为需要用到绘图,就是在图片上加文字,然后给接口调用的时候改变文字的内容,然后我用js写了一个,但是毕竟输出的是html的协议头,我需要的是输出png的图片,所以就在网上找了下面这篇文章,这篇是最接近我的需求的,首先感谢作者的辛苦付出,我在此分享给大家,如果原作者能看到这篇文章,我想跟他说一下,他后面有个函数名写错了,哈哈。

php绘图的基本原理和步骤

(1)创建画布

(2)绘制需要的各种图形(圆,直线,矩形,弧线,扇形…)

(3)输出图像到网页,也可以另存(可以另存为网站开发常见的几种图片格式,基于存储格式问题,下面介绍一下常见图片格式的特点)

(4)销毁该图片(释放内存)

 

目前网站开发常见的图片格式有:gif  jpg/jpeg  png   bmp…

总结:

gif 图片压缩率高,但是只能显示256色,可能造成颜色丢失,可以显示动画图片;

jpg/jpeg 图片压缩率高(有损压缩),可以用较小的文件来显示,网页上用的比较多;

png(高保真) 该格式综合了gif和jpg的优势,缺点就是不能显示动画。

现在,开始介绍一下php中自带的绘图函数。在开讲之前,首先要确认php配置文件中是否已经启用了gd库(php的绘图库)——  extension=php_gd2.dll。一般来说都是已经默认启动了,如果没有启用,则启用后需重启apache!!!

php绘图中,我们首先要创建画布,默认画布的背景色是黑色。

开始在画布$im上绘制图形:

选择绘制图形使用的颜色(这里使用红色)

(1)画椭圆(当然用同样的函数也可以画出圆)

第1个参数表示在哪个画布在绘图;第2、3个参数表示椭圆的中心坐标(x,y);

第4、5个参数表示椭圆的宽、高(当然宽、高相同时则画出来的椭圆就是圆);

第6个参数表示使用的颜色。

(2)画直线

第1个参数表示在哪个画布在绘图;

第2、3个参数表示直线的起点坐标(x1,y1);

第4、5个参数表示直线的终点坐标(x2,y2);

第6个参数表示使用的颜色。

(3)画矩形

第1个参数表示在哪个画布在绘图;

第2、3个参数表示矩形的左上角坐标(x1,y1);

第4、5个参数表示矩形的宽、高;

第6个参数表示使用的颜色。

(4)画填充矩形

(参数含义同”画矩形“)
(5)画弧线

画弧线是基于类似画椭圆的参数传递参数的。

第1个参数表示在哪个画布在绘图;

第2、3个参数表示弧线所在椭圆的中心坐标(x,y);

第4、5个参数表示弧线所在椭圆的宽、高;

第6、7个参数表示从(第6个参数的值)度到(第7个参数的值)度(如,第6、7个参数值分别为0、30,此时表示从0°顺时针旋转30°画出弧线,而0°所在方向是水平向右的方向);

第8个参数表示使用的颜色。

(6)画扇形

(前8个参数的含义同”画弧线“)第9个参数是php中自带的常量。该值可以为:
IMG_ARC_PIE

IMG_ARC_CHORD

IMG_ARC_NOFILL

IMG_ARC_EDGED

IMG_ARC_PIE和IMG_ARC_CHORD是互斥的;IMG_ARC_CHORD只是用直线连接了起始和结束点,IMG_ARC_PIE则产生圆形边界。IMG_ARC_NOFILL指明弧或弦只有轮廓,不填充。IMG_ARC_EDGED指明用直线将起始和结束点与中心点相连,和IMG_ARC_NOFILL一起使用是画饼状图轮廓的好方法(而不用填充)。

(7)拷贝源图片到目标画布

首先要加载源图片(如,arrow.jpg)

这里特别注意的是:虽然我这张图片的后缀名为jpg,但实际上我调用的却是加载格式为jpg图片的函数。可能读者会纳闷,为什么不是调用imagecreatefromjpeg这个函数呢?实际上,文件的后缀名不能让我们断定该文件究竟属于哪种格式,也就是说即便现在这张图片的后缀名是.jpg,但是也有可能这个图片的真正格式是png格式。那么如何知道该图片的真正格式呢?可以使用getimagesize(“arrow.jpg”); 查看该图片的格式。

打印出返回结果$test后,你就会知道它返回结果的含义了。包括我们可以清楚地知道该图片的”真面目“,其实格式是png格式。同样还可使用该函数,得到源图片的宽、高。

得到宽、高后,将图片拷贝到目标画布上。

第1个参数表示在哪个画布在绘图;

第2参数表示加载的源图片;

第3、4个参数表示目标画布的坐标(x1,y1)(拷贝至画布的坐标(x1,y1)位置);

第5、6个参数表示截取原图片的左上角的坐标(x2,y2)位置;

第7、8个参数表示截取原图片的宽、高值。

(8)写字

第1个参数表示在哪个画布在绘图;

第2个参数表示内置字体(取值是1、2、3、4或5);

第3、4个参数表示所要绘制的内容的左上角的位置坐标;

第5个参数表示所要绘制的内容;第6个参数表示使用的颜色。

使用imagestring函数绘制中文时会出现乱码,这里需要使用到另一个函数 imagettftext。字体一定要拷贝到当前目录,否则会出现意料之外的问题。

第1个参数表示在哪个画布在绘图;

第2个参数表示字体大小;

第3个参数表示设置字体旋转的角度;

第4、5个参数表示所要绘制的内容的左上角的位置坐标;

第6个参数表示使用的颜色;

第7个参数表示字体名称,从字体库复制到当前目录下的字体名;

第8个参数表示所要绘制的内容。

最后,绘制完毕后,需要将图像输出到网页——http响应,另存!

同时还要销毁该图片(释放内存——服务器的内存)。

特别注意:绘制完毕后要释放内存这一操作,如果不释放内存,访客多了,服务器会造成负担。其实这篇文章的原作者释放内容的这里有个错误,他把imagedestroy写成了imagedestory,我写好后在Apache运行没有报错,然后放到IIS运行,却一直提示500错误,我把这行删掉就好了,最后我看了半天才看出来,原来这个函数名是错的。

完整php程序代码:

扩展阅读,可以看看https://www.kanfeidie.com/welfare/349.html

这个里面的有个生成图片的功能就是用的上面的代码,当然修改图片和文字,删掉了一些不要的内容,大家可以参考一下,有问题可以在下方留言。

转载请注明出处:看飞碟 » 用php画布给图片加上文字水印并输出成png、jpg图片

赞 (1) 送糖

评论 1

评论前必须登录!

登陆 注册
  1. jeson
    jeson

可爱的来客!请作者吃颗糖吧

支付宝扫一扫打赏

微信扫一扫打赏

你好,我是Jeson