第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何循環(huán)旋轉(zhuǎn)圖像以在 golang 中創(chuàng)建 GIF?

如何循環(huán)旋轉(zhuǎn)圖像以在 golang 中創(chuàng)建 GIF?

Go
侃侃爾雅 2022-12-19 19:23:22
我想循環(huán)重復(fù)旋轉(zhuǎn)圖像,以便使用 Go 的各種圖像處理工具創(chuàng)建 GIF,但我似乎無(wú)法弄清楚我做錯(cuò)了什么。此處,Gwenview 報(bào)告生成的 GIF 不是動(dòng)畫(huà),并且僅包含一幀。package mainimport (    "image"    "image/color/palette"    "image/color"    "image/gif"    "image/draw"    "io"    "os"    "github.com/disintegration/imaging")func main() {    rotate(os.Stdout)}func rotate(out io.Writer) {    f, _ := os.Open("myimage.png")    defer f.Close()    base, _, _ := image.Decode(f)    const (        rot     = 45    // degrees        nframes = 5    // number of animation frames        delay   = 20     // delay between frames in 10ms units    )    bounds  := base.Bounds()    anim := gif.GIF{LoopCount: nframes}    for i := 0; i < nframes; i++ {        img := imaging.Rotate(base, float64(360 - (rot * i)), color.Transparent)        bounds = img.Bounds()        palettedImg := image.NewPaletted(bounds, palette.Plan9)        draw.Draw(palettedImg, bounds, img, bounds.Min, draw.Src)        anim.Delay = append(anim.Delay, delay)        anim.Image = append(anim.Image, palettedImg)    }    gif.EncodeAll(out, &anim) // NOTE: ignoring encoding errors}
查看完整描述

2 回答

?
蕪湖不蕪

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊

問(wèn)題確實(shí)是您忽略了錯(cuò)誤消息。永遠(yuǎn)不要那樣做,始終準(zhǔn)確地處理錯(cuò)誤!在您的特定情況下,您的示例不起作用,因?yàn)槟鷮⑿聞?chuàng)建的圖像邊界設(shè)置為原始圖像,但是因?yàn)樵诿總€(gè)幀迭代中您都在旋轉(zhuǎn)圖像,所以它們的尺寸超出了原始邊界。如果您沒(méi)有忽略編碼錯(cuò)誤,您可以捕捉到問(wèn)題所在。


err := gif.EncodeAll(out, &anim)

if err != nil {

    fmt.Printf("%v", err)

}

錯(cuò)誤:


$ gif: image block is out of bounds  


查看完整回答
反對(duì) 回復(fù) 2022-12-19
?
慕斯709654

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊

這是我用來(lái)制作一個(gè)gif. 也許它可以幫助您找到解決方案。


package main


import (

    "fmt"

    "image"

    "image/color"

    "image/gif"

    "math"

    "os"

)


type Circle struct {

    X, Y, R float64

}


func (c *Circle) Brightness(x, y float64) uint8 {

    var dx, dy float64 = c.X - x, c.Y - y

    d := math.Sqrt(dx*dx+dy*dy) / c.R

    if d > 1 {

        return 0

    } else {

        return 255

    }

}


func main() {

    var w, h int = 240, 240


    var palette = []color.Color{

        color.RGBA{0x00, 0x00, 0x00, 0xff}, color.RGBA{0x00, 0x00, 0xff, 0xff},

        color.RGBA{0x00, 0xff, 0x00, 0xff}, color.RGBA{0x00, 0xff, 0xff, 0xff},

        color.RGBA{0xff, 0x00, 0x00, 0xff}, color.RGBA{0xff, 0x00, 0xff, 0xff},

        color.RGBA{0xff, 0xff, 0x00, 0xff}, color.RGBA{0xff, 0xff, 0xff, 0xff},

    }

    var images []*image.Paletted

    var delays []int


    var hw, hh float64 = float64(w / 2), float64(h / 2)

    circles := []*Circle{&Circle{}, &Circle{}, &Circle{}}

    steps := 20

    // Set up for the animtion loop 

    for step := 0; step < steps; step++ {

        img := image.NewPaletted(image.Rect(0, 0, w, h), palette)

        images = append(images, img)

        delays = append(delays, 0)


        θ := 2.0 * math.Pi / float64(steps) * float64(step)

        for i, circle := range circles {

            θ0 := 2 * math.Pi / 3 * float64(i)

            circle.X = hw - 40*math.Sin(θ0) - 20*math.Sin(θ0+θ)

            circle.Y = hh - 40*math.Cos(θ0) - 20*math.Cos(θ0+θ)

            circle.R = 50

        }


        for x := 0; x < w; x++ {

            for y := 0; y < h; y++ {

                img.Set(x, y, color.RGBA{

                    circles[0].Brightness(float64(x), float64(y)),

                    circles[1].Brightness(float64(x), float64(y)),

                    circles[2].Brightness(float64(x), float64(y)),

                    255,

                })

            }

        }

    }


    f, err := os.OpenFile("rgb.gif", os.O_WRONLY|os.O_CREATE, 0600)

    if err != nil {

        fmt.Println(err)

        return

    }

    defer f.Close()

    gif.EncodeAll(f, &gif.GIF{

        Image: images,

        Delay: delays,

    })

}

TLDR;請(qǐng)參閱要點(diǎn)以獲取完整示例

感謝nitoyon


查看完整回答
反對(duì) 回復(fù) 2022-12-19
  • 2 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)