Release Scan Tools v0.1.0
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
# Architecture
|
||||
|
||||
The React workbench owns an in-memory ordered list of source `File` objects and
|
||||
serializable page settings. No page content enters local storage. Each source is
|
||||
decoded with `createImageBitmap`; its dimensions and byte size are checked before
|
||||
it joins the workspace.
|
||||
|
||||
The renderer downscales exceptionally large source rasters to a 24-megapixel
|
||||
working ceiling. A projective map sends every destination pixel through the four
|
||||
selected source corners and samples it bilinearly. A bounded pixel pass applies
|
||||
brightness, contrast, perceptual grayscale and optional Otsu/manual threshold.
|
||||
Canvas rotation handles quarter turns and the final ±5 degree deskew. Preview,
|
||||
OCR and export call the same renderer with different disclosed pixel budgets, so
|
||||
the preview semantics match the downloaded result.
|
||||
|
||||
Deskew estimation downsamples to at most 420 pixels on the long edge, tests
|
||||
half-degree candidates from −5 to +5, and scores the horizontal projection of
|
||||
dark pixels. It declines to invent an angle when insufficient foreground exists.
|
||||
|
||||
PDF export dynamically loads jsPDF, renders pages sequentially, JPEG-encodes
|
||||
each bounded page, and fits it into the selected physical page. OCR dynamically
|
||||
loads Tesseract.js only after user confirmation. Its worker, three LSTM-only
|
||||
runtime variants and English integer trained data are copied from pinned npm
|
||||
packages to same-origin release assets. Tesseract's persistent model cache is
|
||||
disabled, one in-memory worker is reused and can be terminated, and no fallback
|
||||
CDN path is used.
|
||||
Reference in New Issue
Block a user