1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
package main
import (
"bytes"
"fmt"
"github.com/mattn/go-gtk/gdkpixbuf"
"github.com/mattn/go-gtk/gtk"
"github.com/mattn/go-sixel"
"image"
"image/png"
"os"
"path/filepath"
)
type Image struct {
name string
img image.Image
}
func main() {
var images []Image
if len(os.Args) == 1 {
var in image.Image
err := sixel.NewDecoder(os.Stdin).Decode(&in)
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
images = append(images, Image{
name: "stdin",
img: in})
} else {
for _, arg := range os.Args[1:] {
f, err := os.Open(arg)
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
var in image.Image
err = sixel.NewDecoder(f).Decode(&in)
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
f.Close()
images = append(images, Image{
name: filepath.Base(f.Name()),
img: in})
}
}
gtk.Init(nil)
window := gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
window.Connect("destroy", gtk.MainQuit)
notebook := gtk.NewNotebook()
for _, img := range images {
var buf bytes.Buffer
err := png.Encode(&buf, img.img)
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
loader, gerr := gdkpixbuf.NewLoaderWithType("png")
if gerr != nil {
fmt.Fprintln(os.Stderr, gerr)
os.Exit(1)
}
_, gerr = loader.Write(buf.Bytes())
if gerr != nil {
fmt.Fprintln(os.Stderr, gerr)
os.Exit(1)
}
gimg := gtk.NewImage()
gimg.SetFromPixbuf(loader.GetPixbuf())
notebook.AppendPage(gimg, gtk.NewLabel(img.name))
}
window.Add(notebook)
window.SetTitle("SixelViewer")
window.ShowAll()
gtk.Main()
}
|