Golang.org/x库初探1——image库

     Golang有一个很有意思的官方库,叫golang.org/x,x可能是extends,experimental,总之是一些在官方库中没有,但是又很有用的库。最近花点时间把这里有用的介绍一下。

  1. Golang.org/x库初探1——image库
  2. Golang.org/x库初探2——text库

提供更多的图像格式

golang.org/x/image库整体结构如图

除了colornames,math,vector等基础库之外,最重要的一块功能是提供了更多的图像格式编解码功能,包括bmp、ccitt、tiff、vp8、vp8l、webp,我们知道官方库中只支持jpeg、png、gif,通过这些库的引入,可以扩展支持更多的图像格式,但其中只有bmp、tiff支持编码,也就是写入文件,其他几种格式仅提供了解码功能。

同时,调用image.RegisterFormat注册成为可解码库的只有bmp, tiff和webp

也就是说,只有以上三种可以通过匿名import,然后通过调用image.Decode进行类型探测并解码成功。

具体可能是因为单帧/多帧等应用场景的区别,具体的暂时没有研究。 

替代原有的Resize等第三方库

原来我们如果要做头像的上传等功能的时候,一般都要用到图像的大小变化resize功能,起初常用的库是

https://github.com/nfnt/resize

这个库搜索量很大,一搜就能出来,但是今年11月已经被作者封存了。

替代的选择就是x库中的

golang.org/x/image/draw

Draw库resize使用上的区别

除了具体函数入参有部分区别之外,和原有常用库区别不大。

插值方法

原nfnt/resize库:

draw库

  1. NearestNeighbor 

  2. ApproxBiLinear 

  3. BiLinear 

  4. CatmullRom

可见官方库在算法选择度上还是差些,幸好,插值算法就是如果你要把图像扩大,那么大图像和小图像之间缺失的部分怎么自动填充的问题,如果仅仅是头像等缩略图的需求,区别不是很大,我们常用的就是NearestNeighbor。

文字绘图时常用的font库

image下还有font库,通常用于在图像上绘制文字的应用场景。

绘制文字需要知道字体,配置大小、是否粗体等信息,font下还有opentype库用于从truetype和opentype的字体描述文件中获得字体信息,但freetype并不包含在x/image/font中,freetype的支持在GitHub - golang/freetype: The Freetype font rasterizer in the Go programming language.

但freetype也是配合x/image/font的。

下周介绍跟文字相关的text库

猜你喜欢

转载自blog.csdn.net/baijiafan/article/details/128575640
今日推荐