代码拉取完成,页面将自动刷新
同步操作将从 wzshiming/pic2ascii 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
package pic2ascii
import (
"image"
"image/color"
)
type Resize struct {
image.Image
x, y int
dx, dy int
}
// Resize image
func NewResize(img image.Image, x, y int) image.Image {
if x == 0 && y == 0 {
return img
}
rect := img.Bounds()
dx := rect.Dx()
dy := rect.Dy()
if x == dx && y == dy {
return img
}
if x == 0 {
x = y * dx / dy
} else if y == 0 {
y = x * dy / dx
}
return Resize{img, x, y, dx, dy}
}
func (c Resize) Bounds() image.Rectangle {
return image.Rectangle{
image.Point{0, 0},
image.Point{c.x, c.y},
}
}
func (c Resize) At(x, y int) color.Color {
ats := []color.Color{}
j0, l0 := y*c.dy/c.y, (y+1)*c.dy/c.y
i0, k0 := x*c.dx/c.x, (x+1)*c.dx/c.x
for i, k := i0, k0; i != k; i++ {
for j, l := j0, l0; j != l; j++ {
ats = append(ats, c.Image.At(i, j))
}
}
if len(ats) == 0 {
return c.Image.At(i0, j0)
}
return Sum(ats)
}
func Sum(cs []color.Color) color.Color {
switch len(cs) {
case 0:
return color.White
case 1:
return cs[0]
}
var sr, sg, sb, sa uint32 = 0, 0, 0, 0
for _, v := range cs {
r, g, b, a := v.RGBA()
sr += r
sg += g
sb += b
sa += a
}
cl := uint32(len(cs))
sr /= cl
sg /= cl
sb /= cl
sa /= cl
return color.RGBA64{uint16(sr), uint16(sg), uint16(sb), uint16(sa)}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。