This commit is contained in:
Celogeek 2022-12-25 22:27:13 +01:00
parent dc24b757c7
commit 74c8a884f1
Signed by: celogeek
GPG Key ID: E6B7BDCFC446233A
2 changed files with 23 additions and 21 deletions

View File

@ -2,7 +2,6 @@ package comicconverter
import ( import (
"image" "image"
"image/color"
"image/jpeg" "image/jpeg"
"os" "os"
@ -34,7 +33,10 @@ func (c *ComicConverter) Load(file string) *ComicConverter {
panic(err) panic(err)
} }
c.img = img newImg := image.NewRGBA(img.Bounds())
draw.Draw(newImg, newImg.Bounds(), img, image.Point{}, draw.Src)
c.img = newImg
return c return c
} }
@ -44,28 +46,31 @@ func (c *ComicConverter) GrayScale() *ComicConverter {
panic("load image first") panic("load image first")
} }
grayImg := image.NewGray16(c.img.Bounds()) newImg := image.NewGray(c.img.Bounds())
draw.Draw(grayImg, grayImg.Bounds(), c.img, image.Point{}, draw.Src) draw.Draw(newImg, newImg.Bounds(), c.img, image.Point{}, draw.Src)
c.img = grayImg c.img = newImg
return c return c
} }
func (c *ComicConverter) isBlank(x, y int) bool {
r, g, b, _ := c.img.At(x, y).RGBA()
return r > 60000 && g > 60000 && b > 60000
}
func (c *ComicConverter) CropMarging() *ComicConverter { func (c *ComicConverter) CropMarging() *ComicConverter {
if c.img == nil { if c.img == nil {
panic("load image first") panic("load image first")
} }
imgArea := c.img.Bounds() imgArea := c.img.Bounds()
colorLimit := uint(color.Gray16{60000}.Y)
LEFT: LEFT:
for x := imgArea.Min.X; x < imgArea.Max.X; x++ { for x := imgArea.Min.X; x < imgArea.Max.X; x++ {
for y := imgArea.Min.Y; y < imgArea.Max.Y; y++ { for y := imgArea.Min.Y; y < imgArea.Max.Y; y++ {
cc, _, _, _ := color.Gray16Model.Convert(c.img.At(x, y)).RGBA() if !c.isBlank(x, y) {
if cc < uint32(colorLimit) {
break LEFT break LEFT
} }
} }
@ -75,8 +80,7 @@ LEFT:
UP: UP:
for y := imgArea.Min.Y; y < imgArea.Max.Y; y++ { for y := imgArea.Min.Y; y < imgArea.Max.Y; y++ {
for x := imgArea.Min.X; x < imgArea.Max.X; x++ { for x := imgArea.Min.X; x < imgArea.Max.X; x++ {
cc, _, _, _ := color.Gray16Model.Convert(c.img.At(x, y)).RGBA() if !c.isBlank(x, y) {
if cc < uint32(colorLimit) {
break UP break UP
} }
} }
@ -86,8 +90,7 @@ UP:
RIGHT: RIGHT:
for x := imgArea.Max.X - 1; x >= imgArea.Min.X; x-- { for x := imgArea.Max.X - 1; x >= imgArea.Min.X; x-- {
for y := imgArea.Min.Y; y < imgArea.Max.Y; y++ { for y := imgArea.Min.Y; y < imgArea.Max.Y; y++ {
cc, _, _, _ := color.Gray16Model.Convert(c.img.At(x, y)).RGBA() if !c.isBlank(x, y) {
if cc < uint32(colorLimit) {
break RIGHT break RIGHT
} }
} }
@ -97,22 +100,21 @@ RIGHT:
BOTTOM: BOTTOM:
for y := imgArea.Max.Y - 1; y >= imgArea.Min.Y; y-- { for y := imgArea.Max.Y - 1; y >= imgArea.Min.Y; y-- {
for x := imgArea.Min.X; x < imgArea.Max.X; x++ { for x := imgArea.Min.X; x < imgArea.Max.X; x++ {
cc, _, _, _ := color.Gray16Model.Convert(c.img.At(x, y)).RGBA() if !c.isBlank(x, y) {
if cc < uint32(colorLimit) {
break BOTTOM break BOTTOM
} }
} }
imgArea.Max.Y-- imgArea.Max.Y--
} }
grayImg := image.NewGray16(image.Rectangle{ newImg := image.NewRGBA(image.Rectangle{
Min: image.Point{0, 0}, Min: image.Point{0, 0},
Max: image.Point{imgArea.Dx(), imgArea.Dy()}, Max: image.Point{imgArea.Dx(), imgArea.Dy()},
}) })
draw.Draw(grayImg, grayImg.Bounds(), c.img, imgArea.Min, draw.Src) draw.Draw(newImg, newImg.Bounds(), c.img, imgArea.Min, draw.Src)
c.img = grayImg c.img = newImg
return c return c
} }
@ -135,14 +137,14 @@ func (c *ComicConverter) Resize(w, h int) *ComicConverter {
heigth = h heigth = h
} }
imgGray := image.NewGray16(image.Rectangle{ newImg := image.NewRGBA(image.Rectangle{
Min: image.Point{0, 0}, Min: image.Point{0, 0},
Max: image.Point{width, heigth}, Max: image.Point{width, heigth},
}) })
draw.BiLinear.Scale(imgGray, imgGray.Bounds(), c.img, c.img.Bounds(), draw.Src, nil) draw.BiLinear.Scale(newImg, newImg.Bounds(), c.img, c.img.Bounds(), draw.Src, nil)
c.img = imgGray c.img = newImg
return c return c
} }

View File

@ -10,9 +10,9 @@ func main() {
Quality: 90, Quality: 90,
}). }).
Load("/Users/vincent/Downloads/00001.jpg"). Load("/Users/vincent/Downloads/00001.jpg").
GrayScale().
CropMarging(). CropMarging().
Resize(1860, 2480). Resize(1860, 2480).
GrayScale().
Save("/Users/vincent/Downloads/00001_gray.jpg") Save("/Users/vincent/Downloads/00001_gray.jpg")
} }