golang 压缩在golang中解压缩字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 压缩在golang中解压缩字符串相关的知识,希望对你有一定的参考价值。

package main

import (
	"bytes"
	"compress/gzip"
	"fmt"
	"encoding/base64"
	"io/ioutil"
)

func main() {
	var b bytes.Buffer
	gz := gzip.NewWriter(&b)
	if _, err := gz.Write([]byte("YourDataHere")); err != nil {
		panic(err)
	}
	if err := gz.Flush(); err != nil {
		panic(err)
	}
	if err := gz.Close(); err != nil {
		panic(err)
	}
	str := base64.StdEncoding.EncodeToString(b.Bytes())
	fmt.Println(str)
	data, _ := base64.StdEncoding.DecodeString(str)
	fmt.Println(data)
	rdata := bytes.NewReader(data)
	r,_ := gzip.NewReader(rdata)
	s, _ := ioutil.ReadAll(r)
	fmt.Println(string(s))
	
}

如何使用 golang 压缩和调整 gif

【中文标题】如何使用 golang 压缩和调整 gif【英文标题】:how to use golang compress and resize a gif 【发布时间】:2019-06-07 00:01:14 【问题描述】:

是否有使用 golang 压缩和调整 gif 大小的方法或库?

ps:我试过bimg,但是不支持gif。

【问题讨论】:

bimg 通过 C 绑定使用 libvips。你的 lipvbs 是否支持 gif 构建? 【参考方案1】:

见文档https://golang.org/pkg/image/gif/#GIF

func DecodeAll(r io.Reader) (*GIF, error)

现在你可以得到一个 GIF 结构

type GIF struct 
        Image []*image.Paletted // The successive images.

然后您可以在 GIF 中调整每个图像的大小。

for _,img:=range gif.Image
    resize(img)

PS:image.Paletted实现了image.Image,所以可以使用https://github.com/nfnt/resize来调整Image的大小。

【讨论】:

resize 只支持调整图片大小,不支持压缩 image.Image 是一个接口 (https://golang.org/pkg/image/#Image)。而 image.Paletted 实现了该接口。检查https://golang.org/pkg/image/#Paletted【参考方案2】:

我从未使用过,但我认为您可以使用 std 库(导入“image/gif”)读取/写入 GIF。然后使用“resize”之类的东西来调整大小(参见Go Resizing Images)

【讨论】:

以上是关于golang 压缩在golang中解压缩字符串的主要内容,如果未能解决你的问题,请参考以下文章

Golang zip 压缩与解压

在golang中递归压缩目录

Golang压缩Jpeg图片和PNG图片

在 Golang 中解组 XML 时如何在 interface 中获取数据?

Golang zip 压缩与解压

如何在 PHP 中解压缩二进制字符串?