Scanyonero/unit/page-dimensions.go
David Vogel 853a1bb58d Rework into FTP scanning server
- Rename to Scanyonero
- Add FTP server that ingests TIFF, PNG, JPEG or PDF files
- Add web interface to check and modify ingested files
- Rework how ocrmypdf is invoked

Basics are working, but the program is not in a usable state.
2025-05-14 12:08:38 +02:00

53 lines
1.7 KiB
Go

package unit
// PageDimensions contains the page size and margins of a scanned document page.
type PageDimensions[T UnitConstraint] struct {
MediumSize Vec2[T] `json:"mediumSize"` // The size of the page or medium.
ScanSize Rectangle[T] `json:"scanSize"` // The size of the scanned area or image.
}
// NewPageDimensionsFromDensity returns page dimensions for the given resolution resX and resY, and the respective densities.
//
// The resulting PageDimensions will have equal MediumSize and ScanSize (No margin).
// The correct margin or MediumSize can be added later on.
//
// In case any density is nil, this will return zero value PageDimensions.
func NewPageDimensionsFromDensity(resX, resY int, densityX, densityY Density) PageDimensions[Millimeter] {
if densityX == nil || densityY == nil {
return PageDimensions[Millimeter]{}
}
size := Vec2[Millimeter]{
X: Millimeter(resX) / Millimeter(densityX.PerMillimeter()),
Y: Millimeter(resY) / Millimeter(densityY.PerMillimeter()),
}
return PageDimensions[Millimeter]{
MediumSize: size,
ScanSize: Rectangle[Millimeter]{
Size: size,
},
}
}
// NewPageDimensionsFromLengths returns page dimensions for the given lengths.
//
// The resulting PageDimensions will have equal MediumSize and ScanSize (No margin).
// The correct margin or MediumSize can be added later on.
//
// In case any length is nil, this will return zero value PageDimensions.
func NewPageDimensionsFromLengths(x, y Length) PageDimensions[Millimeter] {
if x == nil || y == nil {
return PageDimensions[Millimeter]{}
}
size := Vec2[Millimeter]{X: x.Millimeters(), Y: y.Millimeters()}
return PageDimensions[Millimeter]{
MediumSize: size,
ScanSize: Rectangle[Millimeter]{
Size: size,
},
}
}