Skip to content

Instantly share code, notes, and snippets.

@kwoktung
Last active December 26, 2019 09:34
Show Gist options
  • Save kwoktung/1c2bfd98939f8b7733d47a3d605b71a4 to your computer and use it in GitHub Desktop.
Save kwoktung/1c2bfd98939f8b7733d47a3d605b71a4 to your computer and use it in GitHub Desktop.
golang script to reverse gif picture
package main
import (
"image/gif"
"log"
"os"
"path/filepath"
"strings"
)
func main() {
filename := os.Args[1]
if filename == "" {
return
}
path, err := filepath.Abs(filename)
if err != nil {
log.Fatal(err)
}
reader, err := os.Open(path)
defer reader.Close()
if err != nil {
log.Fatal(err)
}
decoded, err := gif.DecodeAll(reader)
if err != nil {
log.Fatal(err)
}
data := decoded.Image
for left, right := 0, len(data)-1; left < right; left, right = left+1, right-1 {
data[left], data[right] = data[right], data[left]
}
dir, filename := filepath.Split(path)
ext := filepath.Ext(filename)
base := strings.TrimSuffix(filename, ext)
filename = filepath.Join(dir, base + ".reverse" + ext)
w, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY, 0664)
defer w.Close()
if err != nil {
log.Fatal(err)
}
err = gif.EncodeAll(w, decoded)
if err != nil {
log.Fatal(err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment