Anki/image.go

53 lines
918 B
Go

package main
import (
"fmt"
"image"
"image/jpeg"
"image/png"
"os"
"path"
"github.com/Lewuathe/gimg/ansi"
"github.com/nfnt/resize"
)
func View(p string) {
in, err := os.Open(p)
if err != nil {
panic(err)
}
defer in.Close()
var src image.Image
switch path.Ext(p) {
case ".jpg", ".jpeg":
src, err = jpeg.Decode(in)
case ".png":
src, err = png.Decode(in)
default:
panic(path.Ext(p))
}
if err != nil {
panic(err)
}
printImage(30, src)
}
func printImage(xsize int, image image.Image) {
xmax := image.Bounds().Max.X
ratio := float64(xsize) / float64(xmax)
width := uint(float64(xmax) * ratio)
img := resize.Resize(width, 0, image, resize.Bicubic)
for i := 0; i < img.Bounds().Max.Y; i++ {
for j := 0; j < img.Bounds().Max.X; j++ {
r, g, b, _ := img.At(j, i).RGBA()
r = ansi.To256(r)
g = ansi.To256(g)
b = ansi.To256(b)
ansi.Print(r, g, b)
}
fmt.Printf("\n")
}
}