首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将image.RGBA (image.Image)转换为image.Paletted?

如何将image.RGBA (image.Image)转换为image.Paletted?
EN

Stack Overflow用户
提问于 2016-03-07 18:04:21
回答 2查看 4.5K关注 0票数 8

我试图从一系列任意的非苍白图像中创建一个动画GIF。为了创建一个苍白的图像,我需要想出一个调色板。

代码语言:javascript
运行
复制
// 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)

是否有一种简单的方法来实现这一目标?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-22 22:49:24

您也可以使用预定义(https://golang.org/pkg/image/color/palette/),而不是生成自己的调色板。

代码语言:javascript
运行
复制
...
palettedImage := image.NewPaletted(bounds, palette.Plan9)
draw.Draw(palettedImage, palettedImage.Rect, simage, bounds.Min, draw.Over)
...
票数 7
EN

Stack Overflow用户

发布于 2016-03-07 18:04:21

这似乎是一种智能生成调色板的自动方式,在golang中缺失了(如果我错了,请纠正我)。但是似乎有一个存根来提供您自己的Quantizer,这使我看到了gogif项目。(这是image.Gif的明显来源。)

我可以从这个项目中借用MedianCutQuantizer,在这里定义如下:

https://github.com/andybons/gogif/blob/master/mediancut.go

其结果如下:

代码语言:javascript
运行
复制
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)
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35850753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档