UNPKG

image-in-browser

Version:

Package for encoding / decoding images, transforming images, applying filters, drawing primitives on images on the client side (no need for server Node.js)

67 lines 2.48 kB
import { ArrayUtils } from '../../common/array-utils.js'; export class JpegFrame { get components() { return this._components; } get componentsOrder() { return this._componentsOrder; } get extended() { return this._extended; } get progressive() { return this._progressive; } get precision() { return this._precision; } get scanLines() { return this._scanLines; } get samplesPerLine() { return this._samplesPerLine; } get maxHSamples() { return this._maxHSamples; } get maxVSamples() { return this._maxVSamples; } get mcusPerLine() { return this._mcusPerLine; } get mcusPerColumn() { return this._mcusPerColumn; } constructor(components, componentsOrder, extended, progressive, precision, scanLines, samplesPerLine) { this._maxHSamples = 0; this._maxVSamples = 0; this._mcusPerLine = 0; this._mcusPerColumn = 0; this._components = components; this._componentsOrder = componentsOrder; this._extended = extended; this._progressive = progressive; this._precision = precision; this._scanLines = scanLines; this._samplesPerLine = samplesPerLine; } prepare() { for (const [_, component] of this._components) { this._maxHSamples = Math.max(this._maxHSamples, component.hSamples); this._maxVSamples = Math.max(this._maxVSamples, component.vSamples); } this._mcusPerLine = Math.ceil(this._samplesPerLine / 8 / this._maxHSamples); this._mcusPerColumn = Math.ceil(this._scanLines / 8 / this._maxVSamples); for (const [_, component] of this._components) { const blocksPerLine = Math.ceil((Math.ceil(this._samplesPerLine / 8) * component.hSamples) / this._maxHSamples); const blocksPerColumn = Math.ceil((Math.ceil(this._scanLines / 8) * component.vSamples) / this.maxVSamples); const blocksPerLineForMcu = this._mcusPerLine * component.hSamples; const blocksPerColumnForMcu = this._mcusPerColumn * component.vSamples; const blocks = ArrayUtils.generate(blocksPerColumnForMcu, (_) => ArrayUtils.generate(blocksPerLineForMcu, (_) => new Int32Array(64))); component.setBlocks(blocks, blocksPerLine, blocksPerColumn); } } } //# sourceMappingURL=jpeg-frame.js.map