53 lines
918 B
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")
|
|
}
|
|
}
|