2019年我们就开始用PHP绘图功能在网站上输出图片,除了在线输出PNG图片以外,我们还做了输出GIF动画图、SVG矢量图等功能,在网站中应用的效果也非常好。
不过也发现爬虫过多的时候,对服务器负载和带宽有比较大的影响,于是我们最近采取了几项措施。
首先是接入了Cloudflare或者百度云加速,让图片可以保存到CDN中,这样降低了很多源站访问。
但有个别站图片数量非常多,缓存效果不明显,我们就干脆把PHP在线生成图片改为了读取保存在磁盘中的.png文件,这样相当于又添加了一级缓存,免除了读取对应数据库、调用字体字库、图形绘制等操作,对服务器资源节约的效果很明显。
接下来又发现一个问题,大量图片保存到磁盘上占用空间太大,例如1个PNG图片50KB,200万个图片就是100GB。仔细分析,这些生成的图片不是照片,只是文字和图形的结合,是不需要用真彩色的,让同事测试了一下,将png图片从24位真彩色改为8位彩色后,尺寸变为不到原来一半,而肉眼很难分辨出来差别。去网上找到了需要添加一行语句就可以实现:
imagetruecolortopalette($im, false, 255);//2021-7-29转为8位彩色(256色),尺寸减少一半以上
改动起来非常方便,实际运用起来也效果明显,除了可以让保存到磁盘的文件更小以外,网络传输的尺寸、花费时间也都大大缩减。
不过后来有同事仔细对比转换前后的图片,发现以前是白底的,现在变成了很浅很浅的黄色或者青色,暂时还没有找到解决办法,不过影响不大。
评论