initial commit

This commit is contained in:
2023-03-01 23:45:10 +02:00
commit f6b1c99058
6 changed files with 174 additions and 0 deletions
+82
View File
@@ -0,0 +1,82 @@
package main
import (
"image"
"image/color/palette"
"image/draw"
"image/gif"
"image/png"
"io/ioutil"
"log"
"os"
"path/filepath"
)
func main() {
if len(os.Args) < 2 {
log.Fatal("No directory or file provided.")
}
path := os.Args[1]
if path == "" {
log.Fatal("No directory or file provided.")
}
files, err := ioutil.ReadDir(path)
if err != nil {
log.Fatal(err)
}
images := make([]*image.Paletted, 0)
delay := make([]int, 0)
disposal := make([]byte, 0)
for _, fileInfo := range files {
if fileInfo.IsDir() {
continue
}
file, err := os.OpenFile(filepath.Join(path, fileInfo.Name()), os.O_RDWR, os.ModeExclusive)
if err != nil {
log.Fatal("Failed to open file")
}
defer file.Close()
img, err := png.Decode(file)
if err != nil {
log.Fatal(err)
}
opts := gif.Options{
NumColors: 256,
Drawer: draw.FloydSteinberg,
}
b := img.Bounds()
myPalette := append(palette.WebSafe, image.Transparent)
pimg := image.NewPaletted(b, myPalette)
opts.Drawer.Draw(pimg, b, img, image.ZP)
images = append(images, pimg)
delay = append(delay, 10)
disposal = append(disposal, 2)
}
outGif := &gif.GIF{
Image: images,
Delay: delay,
LoopCount: 0,
Disposal: disposal,
BackgroundIndex: 40,
}
out, err := os.Create("out.gif")
if err != nil {
log.Fatal(err)
}
defer out.Close()
err = gif.EncodeAll(out, outGif)
if err != nil {
log.Fatal(err)
}
}