From 75ddd6304109434a66064485bdaa23fb893990fa Mon Sep 17 00:00:00 2001 From: Balearica Date: Wed, 10 Aug 2022 22:10:29 -0700 Subject: [PATCH] Revert "Add support for ImageData and fix a hang in buffer handling (#610)" This reverts commit 67848464ac6d89d00c3404e0ac90f36cf98c7233. --- src/worker-script/utils/setImage.js | 30 +++++++++-------------------- src/worker/browser/loadImage.js | 4 ---- 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/src/worker-script/utils/setImage.js b/src/worker-script/utils/setImage.js index c8fabcd..e9918db 100644 --- a/src/worker-script/utils/setImage.js +++ b/src/worker-script/utils/setImage.js @@ -9,37 +9,27 @@ const fileType = require('file-type'); * @access public */ module.exports = (TessModule, api, image) => { - const buf = (image instanceof Uint8Array) ? Buffer.from(image) : null; - const type = buf ? fileType(buf) : null; + const buf = Buffer.from(Array.from({ ...image, length: Object.keys(image).length })); + const type = fileType(buf); let bytesPerPixel = 0; let data = null; let pix = null; let w = 0; let h = 0; - - if (image instanceof ImageData) { - // The pixel format of ImageData is RGBA and technically - // Tesseract is expecting ABGR, but it does not seem to matter - // in practice, so to save effort the bytes are not rearranged. - data = TessModule._malloc(image.data.byteLength); - TessModule.HEAPU8.set(image.data, data); - w = image.width; - h = image.height; - bytesPerPixel = 4; - } else if (buf && type && type.mime === 'image/bmp') { - /* - * Although leptonica should support reading bmp, there is a bug of "compressed BMP files". - * As there is no solution, we need to use bmp-js for now. - * @see https://groups.google.com/forum/#!topic/tesseract-ocr/4mPD9zTxdxE - */ + /* + * Although leptonica should support reading bmp, there is a bug of "compressed BMP files". + * As there is no solution, we need to use bmp-js for now. + * @see https://groups.google.com/forum/#!topic/tesseract-ocr/4mPD9zTxdxE + */ + if (type && type.mime === 'image/bmp') { const bmpBuf = bmp.decode(buf); data = TessModule._malloc(bmpBuf.data.length * Uint8Array.BYTES_PER_ELEMENT); TessModule.HEAPU8.set(bmpBuf.data, data); w = bmpBuf.width; h = bmpBuf.height; bytesPerPixel = 4; - } else if (buf) { + } else { const ptr = TessModule._malloc(buf.length * Uint8Array.BYTES_PER_ELEMENT); TessModule.HEAPU8.set(buf, ptr); pix = TessModule._pixReadMem(ptr, buf.length); @@ -54,8 +44,6 @@ module.exports = (TessModule, api, image) => { .map((v, idx) => ( TessModule.getValue(pix + (idx * 4), 'i32') )); - } else { - throw Error('Unsupported image data container'); } /* diff --git a/src/worker/browser/loadImage.js b/src/worker/browser/loadImage.js index 34f047d..3102967 100644 --- a/src/worker/browser/loadImage.js +++ b/src/worker/browser/loadImage.js @@ -82,10 +82,6 @@ const loadImage = async (image) => { img = await fixOrientationFromUrlOrBlobOrFile(img); } data = await readFromBlobOrFile(img); - } else if (image instanceof ImageData) { - // Support a canvas' ImageData by passing it directly, - // where it is handled by setImage() without conversion. - return image; } return new Uint8Array(data);