zxing-wasm
Version:
ZXing-C++ WebAssembly as an ES/CJS module with types
231 lines (230 loc) • 7.62 kB
TypeScript
import { type ReadInputBarcodeFormat } from "./barcodeFormat.js";
import { type Binarizer } from "./binarizer.js";
import { type CharacterSet } from "./characterSet.js";
import { type EanAddOnSymbol } from "./eanAddOnSymbol.js";
import { type TextMode } from "./textMode.js";
/**
* @internal
*/
export interface ZXingReaderOptions {
/**
* @internal
*/
formats: string;
/**
* Spend more time to try to find a barcode. Optimize for accuracy, not speed.
*
* @defaultValue `true`
*/
tryHarder: boolean;
/**
* Try detecting code in 90, 180 and 270 degree rotated images.
*
* @defaultValue `true`
*/
tryRotate: boolean;
/**
* Try detecting inverted (reversed reflectance) codes if the format allows for those.
*
* @defaultValue `true`
*/
tryInvert: boolean;
/**
* Try detecting code in downscaled images (depending on image size).
*
* @defaultValue `true`
* @see {@link downscaleFactor | `downscaleFactor`} {@link downscaleThreshold | `downscaleThreshold`}
*/
tryDownscale: boolean;
/**
* Try detecting code after denoising (currently morphological closing filter for 2D symbologies only).
*
* @experimental
* @defaultValue `false`
*/
tryDenoise: boolean;
/**
* @internal
*/
binarizer: number;
/**
* Set to `true` if the input contains nothing but a single perfectly aligned barcode (usually generated images).
*
* @defaultValue `false`
*/
isPure: boolean;
/**
* Image size `min(width, height)` threshold at which to start downscaled scanning.
*
* @defaultValue `500`
* @remarks Internally represented as an unsigned 16-bit integer (`0..65535`).
* @see {@link tryDownscale | `tryDownscale`} {@link downscaleFactor | `downscaleFactor`}
*/
downscaleThreshold: number;
/**
* Scale factor to use during downscaling, meaningful values are `2`, `3` and `4`.
*
* @defaultValue `3`
* @remarks Internally represented as an unsigned 8-bit integer (`0..255`).
* @see {@link tryDownscale | `tryDownscale`} {@link downscaleThreshold | `downscaleThreshold`}
*/
downscaleFactor: number;
/**
* The number of scan lines in a linear barcode that have to be equal to accept the result.
*
* @defaultValue `2`
* @remarks Internally represented as an unsigned 8-bit integer (`0..255`).
*/
minLineCount: number;
/**
* The maximum number of symbols / barcodes to detect / look for in the image.
*
* Use `0` to remove the limit. Otherwise the effective range is `1..255`.
*
* @defaultValue `255`
* @remarks Internally represented as an unsigned 8-bit integer (`0..255`).
*/
maxNumberOfSymbols: number;
/**
* Validate optional checksums where applicable (e.g. Code39, ITF).
*
* @defaultValue `false`
*/
validateOptionalChecksum: boolean;
/**
* If `true`, return the barcodes with errors as well (e.g. checksum errors).
*
* @defaultValue `false`
* @see {@link ReadResult.error | `ReadResult.error`}
*/
returnErrors: boolean;
/**
* @internal
*/
eanAddOnSymbol: number;
/**
* @internal
*/
textMode: number;
/**
* @internal
*/
characterSet: number;
/**
* Enable the heuristic to detect and decode "full ASCII" / extended Code39 symbols.
*
* @defaultValue `true`
*
* @deprecated This option no longer has any effect and is kept only for backward compatibility.
* Use `Code39Ext` or `Code39Std` to select full ASCII or standard Code39 mode.
*/
tryCode39ExtendedMode: boolean;
}
/**
* Reader options for reading barcodes.
*/
export interface ReaderOptions extends Partial<Omit<ZXingReaderOptions, "formats" | "binarizer" | "eanAddOnSymbol" | "textMode" | "characterSet">> {
/**
* A set of {@link ReadInputBarcodeFormat | `ReadInputBarcodeFormat`}s that should be searched for.
* An empty list `[]` indicates all supported formats.
*
* Accepted values are derived from `barcodeFormat.ts` (`BCF`) and include:
* - canonical format names (e.g. `"QRCode"`, `"Code128"`),
* - meta format names (e.g. `"All"`, `"AllLinear"`),
* - human-readable labels from the table (e.g. `"QR Code"`, `"Code 128"`),
* - backward-compatible aliases (e.g. `"Linear-Codes"`, `"Matrix-Codes"`, `"Any"`, `"DataBarExpanded"`, `"DataBarLimited"`, `"rMQRCode"`).
*
* @remarks Values are normalized by {@link encodeFormats | `encodeFormats`} before being sent to C++.
*
* @defaultValue `[]`
*/
formats?: ReadInputBarcodeFormat[];
/**
* Algorithm to use for the grayscale to binary transformation.
* The difference is how to get to a threshold value T
* which results in a bit value R = L <= T.
*
* - `"LocalAverage"`
*
* T = average of neighboring pixels for matrix and GlobalHistogram for linear (HybridBinarizer)
*
* - `"GlobalHistogram"`
*
* T = valley between the 2 largest peaks in the histogram (per line in linear case)
*
* - `"FixedThreshold"`
*
* T = 127
*
* - `"BoolCast"`
*
* T = 0, fastest possible
*
* @defaultValue `"LocalAverage"`
*/
binarizer?: Binarizer;
/**
* Specify whether to ignore, read or require EAN-2 / 5 add-on symbols while scanning EAN / UPC codes.
*
* - `"Ignore"`
*
* Ignore any Add-On symbol during read / scan
*
* - `"Read"`
*
* Read EAN-2 / EAN-5 Add-On symbol if found
*
* - `"Require"`
*
* Require EAN-2 / EAN-5 Add-On symbol to be present
*
* @defaultValue `"Ignore"`
*/
eanAddOnSymbol?: EanAddOnSymbol;
/**
* Specifies the `TextMode` that controls the result of {@link ReadResult.text | `ReadResult.text`}.
*
* - `"Plain"`
*
* {@link ReadResult.bytes | `ReadResult.bytes`} transcoded to unicode based on ECI info or guessed character set
*
* - `"ECI"`
*
* Standard content following the ECI protocol with every character set ECI segment transcoded to unicode
*
* - `"HRI"`
*
* Human Readable Interpretation (dependent on the ContentType)
*
* - `"Hex"`
*
* {@link ReadResult.bytes | `ReadResult.bytes`} transcoded to ASCII string of HEX values
*
* - `"HexECI"`
*
* {@link ReadResult.bytesECI | `ReadResult.bytesECI`} transcoded to ASCII string of HEX values
*
* - `"Escaped"`
*
* Escape non-graphical characters in angle brackets (e.g. ASCII `29` will be transcoded to `"<GS>"`)
*
* @defaultValue `"HRI"`
*/
textMode?: TextMode;
/**
* Character set to use (when applicable).
* If this is set to `"Unknown"`, auto-detecting will be used.
*
* @defaultValue `"Unknown"`
*/
characterSet?: CharacterSet;
}
export declare const defaultReaderOptions: Required<ReaderOptions> & ReaderOptions;
/**
* Converts ReaderOptions to ZXingReaderOptions format.
*
* @param readerOptions - The complete set of reader options to be converted
* @returns A ZXingReaderOptions object with encoded values for formats, binarizer,
* EAN add-on symbol, text mode, and character set
*/
export declare function readerOptionsToZXingReaderOptions(readerOptions: Required<Omit<ReaderOptions, "tryCode39ExtendedMode">> & ReaderOptions): ZXingReaderOptions;