mirror of
https://github.com/tenox7/wrp.git
synced 2024-11-21 04:31:25 +00:00
90 lines
2.6 KiB
Go
90 lines
2.6 KiB
Go
// wrp utility functions
|
|
package main
|
|
|
|
import (
|
|
"image"
|
|
"image/color/palette"
|
|
"log"
|
|
"net"
|
|
"strings"
|
|
|
|
"github.com/MaxHalford/halfgone"
|
|
"github.com/soniakeys/quant/median"
|
|
)
|
|
|
|
func printMyIPs(b string) {
|
|
ap := strings.Split(b, ":")
|
|
if len(ap) < 1 {
|
|
log.Fatal("Wrong format of ipaddress:port")
|
|
}
|
|
log.Printf("Listen address: %v", b)
|
|
if ap[0] != "" && ap[0] != "0.0.0.0" {
|
|
return
|
|
}
|
|
a, err := net.InterfaceAddrs()
|
|
if err != nil {
|
|
log.Print("Unable to get interfaces: ", err)
|
|
return
|
|
}
|
|
var m string
|
|
for _, i := range a {
|
|
n, ok := i.(*net.IPNet)
|
|
if !ok || n.IP.IsLoopback() || strings.Contains(n.IP.String(), ":") {
|
|
continue
|
|
}
|
|
m = m + n.IP.String() + " "
|
|
}
|
|
log.Print("My IP addresses: ", m)
|
|
}
|
|
|
|
func gifPalette(i image.Image, n int64) image.Image {
|
|
switch n {
|
|
case 2:
|
|
i = halfgone.FloydSteinbergDitherer{}.Apply(halfgone.ImageToGray(i))
|
|
case 216:
|
|
var FastGifLut = [256]int{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}
|
|
r := i.Bounds()
|
|
// NOTE: the color index computation below works only for palette.WebSafe!
|
|
p := image.NewPaletted(r, palette.WebSafe)
|
|
if i64, ok := i.(image.RGBA64Image); ok {
|
|
for y := r.Min.Y; y < r.Max.Y; y++ {
|
|
for x := r.Min.X; x < r.Max.X; x++ {
|
|
c := i64.RGBA64At(x, y)
|
|
r6 := FastGifLut[c.R>>8]
|
|
g6 := FastGifLut[c.G>>8]
|
|
b6 := FastGifLut[c.B>>8]
|
|
p.SetColorIndex(x, y, uint8(36*r6+6*g6+b6))
|
|
}
|
|
}
|
|
} else {
|
|
for y := r.Min.Y; y < r.Max.Y; y++ {
|
|
for x := r.Min.X; x < r.Max.X; x++ {
|
|
c := i.At(x, y)
|
|
r, g, b, _ := c.RGBA()
|
|
r6 := FastGifLut[r&0xff]
|
|
g6 := FastGifLut[g&0xff]
|
|
b6 := FastGifLut[b&0xff]
|
|
p.SetColorIndex(x, y, uint8(36*r6+6*g6+b6))
|
|
}
|
|
}
|
|
}
|
|
i = p
|
|
default:
|
|
q := median.Quantizer(n)
|
|
i = q.Paletted(i)
|
|
}
|
|
return i
|
|
}
|
|
|
|
func asciify(s []byte) []byte {
|
|
a := make([]byte, len(s))
|
|
for i := 0; i < len(s); i++ {
|
|
if s[i] > 127 {
|
|
a[i] = '.'
|
|
continue
|
|
}
|
|
a[i] = s[i]
|
|
}
|
|
return a
|
|
}
|