Coder Social home page Coder Social logo

fqimg's Introduction

FQimg

这是一个用go语言写的实时图片服务器 有如下特性
  1. 动态处理图片。在请求的url上加上不同的尺寸参数就可以得到不同的尺寸的图片。
  2. 链式图片处理。对一个图片进行多重处理,这和unix的pipeline很类似。
  3. 高性能。得益于go语言的并发特性,此图片服务器的内存,cpu占用都很低,能同时处理的图片数量也很可观。
  4. webp图片格式支持。webp比之于jpeg,能更好的压缩图片的存储和传输体积,这点对移动应用尤为重要。
  5. 部署简单,只有一个可执行文件,不依赖任何外部运行库,只需将可执行文件拷贝到服务器即可执行。
  6. 支持多种输出格式和输出质量。当前能够支持jpeg,gif,png,bmp,webp格式,对于jpeg,gif,webp还能够支持自定义输出图片质量。
  7. 支持本地文件缓存,极大提高性能。
  8. 支持上传控制,确保只有可信IP才能上传。
  9. 支持三种存储后端,本地文件,fastdfsseaweeddfs

示例

原图如下 http://image.fanqiangti.net/get/2830dfa89daaf37b13c3421b7807df27

动态剪裁的例子 动态剪裁成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

未来开发路线图

  1. 支持自定义输出格式和格式质量,比如输出jpg,png,gif。(已完成)
  2. 支持webp格式。webp格式压缩的图片尺寸更小。(已完成)
  3. 增加后端分布式存储。当前版本只支持本地文件系统存储,只能利用单台机器的存储能力。(已完成)
  4. 增加安全性。对于恶意攻击增加防御能力。(已完成,请见配置文件中的上传控制)
  5. 增加图片水印支持。(已完成,参见配置文件)
  6. 开发插件系统,使其更容已扩展

文档。

1.安装及运行

go get github.com/loveczp/fqimg
注意,

  • 在windows上务必安装tdm-gcc否则无法编译安装通过
  • go 版本必须大于等于1.8

然后运行 fqimg -c=path/to/config/file

2.图片上传

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

3.图片操作

  • 每一个图片操作就是一个处理命令,命令有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
        • 命令列表

          fit fit=width_height
          fit=width_height_filter
          fit=100_300
          fit=100_300_box
          fit模式裁剪
          fill fill=width_height
          fill=width_height_filter
          fill=width_height_filter_anchor
          fill=100_300
          fill=100_300_box
          fill=100_300_box_top
          fill模式裁剪
          resize resize=width_height
          resize=width_height_filter
          resize=100_300
          resize=100_300_box
          resize模式裁剪
          gamma gamma
          gamma=stength
          gamma
          gamma=234
          contrast contrast
          contrast=stength
          contrast
          contrast=20
          增加对比度
          brightness brightness
          brightness=stength
          brightness
          brightness=0.5
          增加亮度
          grayscale grayscale grayscale
          变成灰度图
          invert invert invert
          反相
          blur blur
          blur=stength
          blur
          blur=3.5
          模糊
          sharpen sharpen
          sharpen=stength
          sharpen
          sharpen=3.5
          锐化
          rotate90 rotate90 rotate90 正向旋转90度
          rotate180 rotate180 rotate180正向旋转180度
          rotate270 rotate270 rotate270正向旋转270度
          flipH flipH flipH水平翻转
          flipV flipV flipV水平翻转
          webp webp
          webp=quality
          webp
          webp=80
          用80%的质量输出成webp格式
          jpeg jpeg
          jpeg=quality
          jpeg
          jpeg=80
          用80%的质量输出成jpeg格式
          png png png 输出成png格式
          gif gif
          gif=num
          num为颜色数量
          png
          png=128
          输出成128色的gif格式
          mark mark=mid
          mark=mid_offx_offy
          mark=mid_offx_offy_offp
          mark=mid_offx_offy_offp_alpha
          加水印 mid为配置文件中mark部分左边的key
          mark=a
          mark=a_10_10
          mark=a_10_10_lu
          mark=a_10_10_lu_255

fqimg's People

Contributors

loveczp avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.