zimg图片服务器入门
1|0zimg简介
zimg是一个轻量级、高性能的图像存储和处理系统。
2|0zimg特性
- 通过HTTP协议上传、下载和处理图像;
- 支持图片数据分布式存储(beansDB、SSDB);
- 并发 I/O 的高性能和压缩图像。;
- 支持 lua 脚本以处理自定义压缩策略;
- 支持 memcach 和重新制定协议,将图像保存到分布式存储后端;
- 操作和维护各种配置选项。
3|0zimg存储架构
为了极致的性能表现,zimg全部采用C语言开发,总体上分为三个层次,前端http处理层,中间图片处理层和后端的存储层。
为了避免数据库带来的性能瓶颈,zimg不引入结构化数据库,图片的查找全部采用哈希来解决。事实上图片服务器的设计,是一个在I/O与CPU运算之间的博弈过程,最好的策略当然是继续拆:CPU敏感的http和图片处理层部署于运算能力更强的机器上,内存敏感的cache层部署于内存更大的机器上,I/O敏感的物理存储层则放在配备SSD的机器上,但并不是所有人都能负担得起这么奢侈的配置。zimg折中成本和业务需求,目前只需要部署在一台服务器上。由于不同服务器硬件不同,I/O和CPU运算速度差异很大,很难一棒子定死。zimg所选择的思路是,尽量减少I/O,将压力放在CPU上,事实证明这样的思路基本没错,在硬盘性能很差的机器上效果更加明显;即使以后SSD全面普及,CPU的运算能力也会相应提升,总体来说zimg的方案也不会太失衡。
zimg的部署力求简单,最佳的方案是zimg和后端存储分开在不同的机器上,因为zimg涉及压图,属于计算密集型,存储层无论是beansdb还是SSDB,都属于I/O密集型,而且由于zimg可以启用memcached做缓存,正好也可以充分利用机器上的内存,而存储机上的内存会被beansdb和SSDB用到,互不影响同时也不会浪费。
4|0zimg部署
4|1安装必要依赖库
openssl
cmake
libevent
nasm
libjpeg-turbo
webp
imagemagick
libmemcached
4|2下载安装zimg
4|3安装存储组件(可选)
memcached
beansdb
beenseye
SSDB
twemproxy
4|4修改配置文件
4|5启动zimg
5|0图片操作
5|1上传文件
form表单形式(返回html数据)
地址栏输入ip:4869,可访问zimg内置的简化图片上传页面,选择图片上传后(可批量上传),返回上传成功的页面;
raw-post形式(返回json数据)
使用代码上传文件,返回json响应数据,其中包含文件对应的唯一md5编码值,访问图片的形式不变。
注:上传相同文件,不会生成新的存储数据!
5|2访问图片
http://ip:port/图片md5编码
访问图片时,不带任何参数,则zimg默认返回原图质量75%的图片。
可附带几个参数,对图片进行一些简单的处理工作,可用的参数列表如下:
参数名称 | 参数含义 | 备注 |
w | 图片宽度 |
只限定长或者宽其中一项,会隐式附带缩放参数p=1,图片会被等比例缩放;若二者都设置,则会按照设置的宽高返回图片数据 |
h | 图片高度 | |
g | 是否去除图片颜色 |
g=1代表去除颜色,返回黑白图片 |
x | 锚点横坐标 | |
y | 锚点纵坐标 | |
r | 旋转角度(顺时针方向) | |
p | 缩放级别 |
p=0,代表查看原图; p=1,代表等比例缩放 p=2,代表不缩放 p=3,代表按比例缩放(比例为w、h设置) |
q | 图片质量(0=100) | 数值越高,则图片质量越高 |
f | 返回指定图片格式('jpeg', 'jpg', 'png', 'gif', 'webp') |
5|3删除图片
调用http://ip:port/admin接口,传入参数md5、t=1即可。
6|0
7|0使用问题
- zimg项目在github上最后的提交时间为2017年10月18日,此后项目没有任何的更新和维护,若我们在使用zimg的过程中出现问题,则可能很难去解决;
- 二次开发困难。zimg主要使用C语言开发,虽然代码开源,但是我们很难在此基础上扩展新功能;
- zimg的部署和运行需要安装大量依赖,实际部署时可能会出现依赖版本冲突情况,另外安装多个第三方依赖,对于服务器是否存在其他影响也是未知的;
- zimg服务的稳定性,有待实际投入后观察;
- 存入的图片信息有限,比如无采集时间、上传时间等字段。
__EOF__

本文链接:https://www.cnblogs.com/yjry-th/p/17170825.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理