我试图从一系列任意的非苍白图像中创建一个动画GIF。为了创建一个苍白的图像,我需要想出一个调色板。
// RGBA, etc. images from somewhere else
var frames []image.Image
outGif := &gif.GIF{}
for _, simage := range frames {
// TODO: Convert image to paletted image
// bounds := simage.Bounds()
// palettedImage := image.NewPaletted(bounds, ...)
// Add new frame to animated GIF
outGif.Image = append(outGif.Image, palettedImage)
outGif.Delay = append(outGif.Delay, 0)
}
gif.EncodeAll(w, outGif)
是否有一种简单的方法来实现这一目标?
发布于 2017-06-22 22:49:24
您也可以使用预定义(https://golang.org/pkg/image/color/palette/),而不是生成自己的调色板。
...
palettedImage := image.NewPaletted(bounds, palette.Plan9)
draw.Draw(palettedImage, palettedImage.Rect, simage, bounds.Min, draw.Over)
...
发布于 2016-03-07 18:04:21
这似乎是一种智能生成调色板的自动方式,在golang中缺失了(如果我错了,请纠正我)。但是似乎有一个存根来提供您自己的Quantizer
,这使我看到了gogif
项目。(这是image.Gif
的明显来源。)
我可以从这个项目中借用MedianCutQuantizer
,在这里定义如下:
https://github.com/andybons/gogif/blob/master/mediancut.go
其结果如下:
var subimages []image.Image // RGBA, etc. images from somewhere else
outGif := &gif.GIF{}
for _, simage := range subimages {
bounds := simage.Bounds()
palettedImage := image.NewPaletted(bounds, nil)
quantizer := gogif.MedianCutQuantizer{NumColor: 64}
quantizer.Quantize(palettedImage, bounds, simage, image.ZP)
// Add new frame to animated GIF
outGif.Image = append(outGif.Image, palettedImage)
outGif.Delay = append(outGif.Delay, 0)
}
gif.EncodeAll(w, outGif)
https://stackoverflow.com/questions/35850753
复制相似问题