mirror of
https://github.com/Dadido3/noita-mapcap.git
synced 2024-11-18 17:17:31 +00:00
Add parameters for DZI output
This commit is contained in:
parent
9da52a3f70
commit
d774cf373d
@ -44,6 +44,10 @@ example list of files:
|
|||||||
- `output string`
|
- `output string`
|
||||||
The path and filename of the resulting stitched image. Defaults to "output.png".
|
The path and filename of the resulting stitched image. Defaults to "output.png".
|
||||||
Supported formats/file extensions: `.png`, `.jpg`, `.dzi`.
|
Supported formats/file extensions: `.png`, `.jpg`, `.dzi`.
|
||||||
|
- `dzi-tile-size`
|
||||||
|
The size of the resulting deep zoom image (DZI) tiles in pixels. Defaults to 512.
|
||||||
|
- `dzi-tile-overlap`
|
||||||
|
TThe number of additional pixels around every deep zoom image (DZI) tile in pixels. Defaults to 2.
|
||||||
- `xmax int`
|
- `xmax int`
|
||||||
Right bound of the output rectangle. This coordinate is not included in the output.
|
Right bound of the output rectangle. This coordinate is not included in the output.
|
||||||
- `xmin int`
|
- `xmin int`
|
||||||
|
@ -17,11 +17,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
dziTileSize = 512 // The (maximum) width and height of a tile in pixels, not including the overlap.
|
|
||||||
dziOverlap = 2 // The amount of additional pixels on every side of every tile. The real (max) width/height of an image is `2*overlap + tileSize`.
|
|
||||||
)
|
|
||||||
|
|
||||||
type DZI struct {
|
type DZI struct {
|
||||||
stitchedImage *StitchedImage
|
stitchedImage *StitchedImage
|
||||||
|
|
||||||
@ -33,7 +28,10 @@ type DZI struct {
|
|||||||
maxZoomLevel int // The maximum zoom level that is needed.
|
maxZoomLevel int // The maximum zoom level that is needed.
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDZI(stitchedImage *StitchedImage) DZI {
|
// NewDZI creates a new DZI from the given StitchedImages.
|
||||||
|
//
|
||||||
|
// dziTileSize and dziOverlap define the size and overlap of the resulting DZI tiles.
|
||||||
|
func NewDZI(stitchedImage *StitchedImage, dziTileSize, dziOverlap int) DZI {
|
||||||
dzi := DZI{
|
dzi := DZI{
|
||||||
stitchedImage: stitchedImage,
|
stitchedImage: stitchedImage,
|
||||||
|
|
||||||
|
@ -12,12 +12,12 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func exportDZI(stitchedImage *StitchedImage, outputPath string) error {
|
func exportDZI(stitchedImage *StitchedImage, outputPath string, dziTileSize, dziOverlap int) error {
|
||||||
descriptorPath := outputPath
|
descriptorPath := outputPath
|
||||||
extension := filepath.Ext(outputPath)
|
extension := filepath.Ext(outputPath)
|
||||||
outputTilesPath := strings.TrimSuffix(outputPath, extension) + "_files"
|
outputTilesPath := strings.TrimSuffix(outputPath, extension) + "_files"
|
||||||
|
|
||||||
dzi := NewDZI(stitchedImage)
|
dzi := NewDZI(stitchedImage, dziTileSize, dziOverlap)
|
||||||
|
|
||||||
// Create base directory of all DZI files.
|
// Create base directory of all DZI files.
|
||||||
if err := os.MkdirAll(outputTilesPath, 0755); err != nil {
|
if err := os.MkdirAll(outputTilesPath, 0755); err != nil {
|
||||||
|
@ -25,6 +25,8 @@ var flagPlayerPathInputPath = flag.String("player-path", filepath.Join(".", ".."
|
|||||||
var flagOutputPath = flag.String("output", filepath.Join(".", "output.png"), "The path and filename of the resulting stitched image. Supported formats/file extensions: `.png`, `.jpg`, `.dzi`.")
|
var flagOutputPath = flag.String("output", filepath.Join(".", "output.png"), "The path and filename of the resulting stitched image. Supported formats/file extensions: `.png`, `.jpg`, `.dzi`.")
|
||||||
var flagScaleDivider = flag.Int("divide", 1, "A downscaling factor. 2 will produce an image with half the side lengths.")
|
var flagScaleDivider = flag.Int("divide", 1, "A downscaling factor. 2 will produce an image with half the side lengths.")
|
||||||
var flagBlendTileLimit = flag.Int("blend-tile-limit", 9, "Limits median blending to the n newest tiles by file modification time. If set to 0, all available tiles will be median blended.")
|
var flagBlendTileLimit = flag.Int("blend-tile-limit", 9, "Limits median blending to the n newest tiles by file modification time. If set to 0, all available tiles will be median blended.")
|
||||||
|
var flagDZITileSize = flag.Int("dzi-tile-size", 512, "The size of the resulting deep zoom image (DZI) tiles in pixels.")
|
||||||
|
var flagDZIOverlap = flag.Int("dzi-tile-overlap", 2, "The number of additional pixels around every deep zoom image (DZI) tile in pixels.")
|
||||||
var flagXMin = flag.Int("xmin", 0, "Left bound of the output rectangle. This coordinate is included in the output.")
|
var flagXMin = flag.Int("xmin", 0, "Left bound of the output rectangle. This coordinate is included in the output.")
|
||||||
var flagYMin = flag.Int("ymin", 0, "Upper bound of the output rectangle. This coordinate is included in the output.")
|
var flagYMin = flag.Int("ymin", 0, "Upper bound of the output rectangle. This coordinate is included in the output.")
|
||||||
var flagXMax = flag.Int("xmax", 0, "Right bound of the output rectangle. This coordinate is not included in the output.")
|
var flagXMax = flag.Int("xmax", 0, "Right bound of the output rectangle. This coordinate is not included in the output.")
|
||||||
@ -229,6 +231,62 @@ func main() {
|
|||||||
*flagOutputPath = result
|
*flagOutputPath = result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fileExtension := strings.ToLower(filepath.Ext(*flagOutputPath))
|
||||||
|
|
||||||
|
// Query the user, if there were no cmd arguments given.
|
||||||
|
if flag.NFlag() == 0 && fileExtension == ".dzi" {
|
||||||
|
prompt := promptui.Prompt{
|
||||||
|
Label: "Enter DZI tile size:",
|
||||||
|
Default: fmt.Sprint(*flagDZITileSize),
|
||||||
|
AllowEdit: true,
|
||||||
|
Validate: func(s string) error {
|
||||||
|
var num int
|
||||||
|
_, err := fmt.Sscanf(s, "%d", &num)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if int(num) < 1 {
|
||||||
|
return fmt.Errorf("number must be at least 1")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := prompt.Run()
|
||||||
|
if err != nil {
|
||||||
|
log.Panicf("Error while getting user input: %v.", err)
|
||||||
|
}
|
||||||
|
fmt.Sscanf(result, "%d", flagDZITileSize)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Query the user, if there were no cmd arguments given.
|
||||||
|
if flag.NFlag() == 0 && fileExtension == ".dzi" {
|
||||||
|
prompt := promptui.Prompt{
|
||||||
|
Label: "Enter DZI tile overlap:",
|
||||||
|
Default: fmt.Sprint(*flagDZIOverlap),
|
||||||
|
AllowEdit: true,
|
||||||
|
Validate: func(s string) error {
|
||||||
|
var num int
|
||||||
|
_, err := fmt.Sscanf(s, "%d", &num)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if int(num) < 0 {
|
||||||
|
return fmt.Errorf("number must be at least 0")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := prompt.Run()
|
||||||
|
if err != nil {
|
||||||
|
log.Panicf("Error while getting user input: %v.", err)
|
||||||
|
}
|
||||||
|
fmt.Sscanf(result, "%d", flagDZIOverlap)
|
||||||
|
}
|
||||||
|
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
|
|
||||||
bar := pb.Full.New(0)
|
bar := pb.Full.New(0)
|
||||||
@ -266,7 +324,6 @@ func main() {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
fileExtension := strings.ToLower(filepath.Ext(*flagOutputPath))
|
|
||||||
switch fileExtension {
|
switch fileExtension {
|
||||||
case ".png":
|
case ".png":
|
||||||
if err := exportPNG(stitchedImage, *flagOutputPath); err != nil {
|
if err := exportPNG(stitchedImage, *flagOutputPath); err != nil {
|
||||||
@ -277,7 +334,7 @@ func main() {
|
|||||||
log.Panicf("Export of JPEG file failed: %v", err)
|
log.Panicf("Export of JPEG file failed: %v", err)
|
||||||
}
|
}
|
||||||
case ".dzi":
|
case ".dzi":
|
||||||
if err := exportDZI(stitchedImage, *flagOutputPath); err != nil {
|
if err := exportDZI(stitchedImage, *flagOutputPath, *flagDZITileSize, *flagDZIOverlap); err != nil {
|
||||||
log.Panicf("Export of DZI file failed: %v", err)
|
log.Panicf("Export of DZI file failed: %v", err)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
Loading…
Reference in New Issue
Block a user