2016-03-07 138 views
1

我試圖創建從一系列任意的非調色板圖像的GIF動畫。爲了創建一個調色板的圖像,我需要想出一個調色板。如何image.RGBA(image.Image)轉換爲image.Paletted?

// 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) 

golang stdlib是否有一個簡單的方法來實現這個目標?

回答

2

看來智能生成調色板的自動方式從golang STDLIB(糾正我,如果我錯了這裏)失蹤。但是,似乎是提供自己的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)