Compare commits

...

3 Commits

Author SHA1 Message Date
jack77213 d28c903b10
Fix image quality 2020-03-02 20:09:20 +08:00
jack77213 3225640d7d
jpeg 2020-03-02 19:36:37 +08:00
jack77213 9a21ef6a3d
maptool-go init 2020-03-02 17:58:01 +08:00
3 changed files with 101 additions and 0 deletions

5
maptool-go/go.mod Normal file
View File

@ -0,0 +1,5 @@
module gitea.hijack.moe/huashui/a3web/maptool
go 1.13
require github.com/disintegration/imaging v1.6.2 // indirect

5
maptool-go/go.sum Normal file
View File

@ -0,0 +1,5 @@
github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 h1:hVwzHzIUGRjiF7EcUjqNxk3NCfkPxbDKRdnNE1Rpg0U=
golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

91
maptool-go/main.go Normal file
View File

@ -0,0 +1,91 @@
package main
import (
"flag"
"fmt"
"image"
"image/color"
"image/jpeg"
"log"
"os"
"strings"
"sync"
"github.com/disintegration/imaging"
)
var (
origMap string
maxLevel int
)
func init() {
flag.StringVar(&origMap, "map", "Enoch.png", "original map file")
flag.IntVar(&maxLevel, "level", 3, "resize level")
}
func main() {
flag.Parse()
origImgFile, err := os.Open(origMap)
if err != nil {
panic(err)
}
defer origImgFile.Close()
config, format, err := image.DecodeConfig(origImgFile)
if err != nil {
panic(err)
}
fmt.Println("Width:", config.Width, "Height:", config.Height, "Format:", format)
origImgFile.Seek(0, 0)
img, _, err := image.Decode(origImgFile)
if err != nil {
panic(err)
}
//////////////////////
width := config.Width
dirName := strings.Split(origMap, ".")[0]
os.Mkdir(dirName, os.ModeDir)
for i := 3; i > 0; i-- {
log.Println(i)
corpImage(img, width, i, dirName)
width = width / 2
img = imaging.Resize(img, width, 0, imaging.Lanczos)
}
}
type subImager interface {
SubImage(r image.Rectangle) image.Image
}
func corpImage(img image.Image, width int, level int, dirname string) {
lveledirname := fmt.Sprintf("%s/%d", dirname, level)
os.Mkdir(lveledirname, os.ModeDir)
var wg sync.WaitGroup
if img, ok := img.(subImager); ok {
for i := 0; i < width; i = i + 1000 {
for j := 0; j < width; j = j + 1000 {
wg.Add(1)
go func(wg *sync.WaitGroup, i, j int, img subImager) {
rect := image.Rect(i, j, i+1000, j+1000)
imgOut := img.SubImage(rect)
imgOut = imaging.Paste(imaging.New(1000, 1000, color.NRGBA{0, 0, 0, 0}), imgOut, image.Pt(0, 0))
fileName := fmt.Sprintf("%s/%d/x%d_y%d.jpg", dirname, level, i/1000, j/1000)
fileOut, err := os.Create(fileName)
if err != nil {
panic(err)
}
jpeg.Encode(fileOut, imgOut, &jpeg.Options{Quality: 85})
fileOut.Close()
wg.Done()
}(&wg, i, j, img)
}
}
} else {
log.Fatalln("Cannot take a SubImage")
}
wg.Wait()
}