- 动态处理图片。在请求的url上加上不同的尺寸参数就可以得到不同的尺寸的图片。
- 链式图片处理。对一个图片进行多重处理,这和unix的pipeline很类似。
- 高性能。得益于go语言的并发特性,此图片服务器的内存,cpu占用都很低,能同时处理的图片数量也很可观。
- webp图片格式支持。webp比之于jpeg,能更好的压缩图片的存储和传输体积,这点对移动应用尤为重要。
- 部署简单,只有一个可执行文件,不依赖任何外部运行库,只需将可执行文件拷贝到服务器即可执行。
- 支持多种输出格式和输出质量。当前能够支持jpeg,gif,png,bmp,webp格式,对于jpeg,gif,webp还能够支持自定义输出图片质量。
- 支持本地文件缓存,极大提高性能。
- 支持上传控制,确保只有可信IP才能上传。
- 支持三种存储后端,本地文件,fastdfs,seaweeddfs
动态剪裁的例子 动态剪裁成400*400的图如下,当然高宽值可以设置成我们需要的任意值 http://image.fanqiangti.net/get/2830dfa89daaf37b13c3421b7807df27?fill=400_400
链式处理的例子 可以把图片裁剪成400*400后,还可以进行灰度处理。如下 http://image.fanqiangti.net/get/2830dfa89daaf37b13c3421b7807df27?fit=200_300&grayscale
webp处理的例子。如下 http://image.fanqiangti.net/get/2830dfa89daaf37b13c3421b7807df27?webp=50
支持自定义输出格式和格式质量,比如输出jpg,png,gif。(已完成)支持webp格式。webp格式压缩的图片尺寸更小。(已完成)增加后端分布式存储。当前版本只支持本地文件系统存储,只能利用单台机器的存储能力。(已完成)增加安全性。对于恶意攻击增加防御能力。(已完成,请见配置文件中的上传控制)增加图片水印支持。(已完成,参见配置文件)- 开发插件系统,使其更容已扩展
go get github.com/loveczp/fqimg
注意,
- 在windows上务必安装tdm-gcc否则无法编译安装通过
- go 版本必须大于等于1.8
然后运行 fqimg -c=path/to/config/file
curl --data-binary @test.jpg "http://image.fanqiangti.net/put" 其中test.jpg是需要上传的文件,这个对应于http中的binary的post上传,windows平台下可以用postman来模拟。 可以得到如下结果。["http://image.fanqiangti.net/get/2830dfa89daaf37b13c3421b7807df27"]
md5就是文件对应的MD5码,系统也是用这个来定位上传的文件。
访问该文件方法如下 http://image.fanqiangti.net/get/2830dfa89daaf37b13c3421b7807df27
- 每一个图片操作就是一个处理命令,命令有0个或者多个参数,参数包含参数名和参数值。参数是以url的参数的方式放在url尾部。即?后面就是参数。 命令名称用c表示,命令的值在下面的表中找。 例如 http://image.fanqiangti.net/get/2830dfa89daaf37b13c3421b7807df27?fit=200_300 上面的命令表示对图片进行压缩,使图片能够容纳在一个200*300的框内。命令本身参数名是c,值是fit。fit命令包含两个参数h,w分别表示高和宽。
- 命令之间可以通过管道链接符号“|”把多个命令连接起来实现多重操作。 例如 http://image.fanqiangti.net/get/2830dfa89daaf37b13c3421b7807df27?fit=200_300&grayscale 上面表示先推图像进行fit压缩操作,然后对操作后的结果进行灰度化 处理。
- 因为需要支持webp,所以使用了github.com/chai2010/webp 这个webp库。在windows上需要mingw的支持,请下载
- go 版本必须大于等于1.8