Lilliput 依靠成熟的、高性能的 C语言库来完成解压、调整大小和压缩图像的大部分工作。它的目标是尽可能少地进行内存分配,尤其是不在 Go 中产生垃圾。因此,它适用于非常高吞吐量的图像大小调整服务。
Lilliput 支持调整 JPEG、PNG、WEBP 和 GIF 动画的大小,它还可以转换格式。Lilliput 还对从 MOV 和 WEBM 视频中获取第一帧有一些支持。Lilliput 目前只支持 Mac 和 Linux。
用法
首先,import "github.com/discord/lilliput"
解码器
Lilliput 关注内存中的图像,因此解码器要求图像数据位于 []byte 缓冲区中。
func lilliput.NewDecoder([]byte buf) (lilliput.Decoder, error)
Decoder
从包含的压缩图像创建一个新对象buf
。当缓冲区的 magic 字节与支持的图像类型之一不匹配时,这将返回错误。
func (d lilliput.Decoder) Header() (lilliput.ImageHeader, error)
读取并返回图像的 header。header 包含图像的元数据。如果图像的 header 格式错误,则返回错误。header 格式错误的图像无法解码。
func (d lilliput.Decoder) Description() string
返回描述图像类型的字符串,例如"JPEG"
or "PNG"
。
func (h lilliput.Decoder) Duration() time.Duration
返回内容的长度。对于静态图像和动画 GIF,返回 0。
func (d lilliput.Decoder) DecodeTo(f *lilliput.Framebuffer) error
完全解码图像并将其像素数据写入f
. 如果解码过程失败,则返回错误。如果图像包含多个帧,则每次调用都会返回一个后续帧。当图像不包含更多要解码的数据时返回io.EOF
。
lilliput 的用户通常不应该调用DecodeTo
而应该使用 ImageOps 对象。
func (d lilliput.Decoder) Close()
关闭解码器并释放资源,Decoder 对象在不再使用时必须有.Close()
调用。