Browse Source

Revert "Add support for ImageData and fix a hang in buffer handling (#610)"

This reverts commit 67848464ac.
pull/634/head
Balearica 2 years ago
parent
commit
75ddd63041
  1. 30
      src/worker-script/utils/setImage.js
  2. 4
      src/worker/browser/loadImage.js

30
src/worker-script/utils/setImage.js

@ -9,37 +9,27 @@ const fileType = require('file-type');
* @access public * @access public
*/ */
module.exports = (TessModule, api, image) => { module.exports = (TessModule, api, image) => {
const buf = (image instanceof Uint8Array) ? Buffer.from(image) : null; const buf = Buffer.from(Array.from({ ...image, length: Object.keys(image).length }));
const type = buf ? fileType(buf) : null; const type = fileType(buf);
let bytesPerPixel = 0; let bytesPerPixel = 0;
let data = null; let data = null;
let pix = null; let pix = null;
let w = 0; let w = 0;
let h = 0; let h = 0;
/*
if (image instanceof ImageData) { * Although leptonica should support reading bmp, there is a bug of "compressed BMP files".
// The pixel format of ImageData is RGBA and technically * As there is no solution, we need to use bmp-js for now.
// Tesseract is expecting ABGR, but it does not seem to matter * @see https://groups.google.com/forum/#!topic/tesseract-ocr/4mPD9zTxdxE
// in practice, so to save effort the bytes are not rearranged. */
data = TessModule._malloc(image.data.byteLength); if (type && type.mime === 'image/bmp') {
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
*/
const bmpBuf = bmp.decode(buf); const bmpBuf = bmp.decode(buf);
data = TessModule._malloc(bmpBuf.data.length * Uint8Array.BYTES_PER_ELEMENT); data = TessModule._malloc(bmpBuf.data.length * Uint8Array.BYTES_PER_ELEMENT);
TessModule.HEAPU8.set(bmpBuf.data, data); TessModule.HEAPU8.set(bmpBuf.data, data);
w = bmpBuf.width; w = bmpBuf.width;
h = bmpBuf.height; h = bmpBuf.height;
bytesPerPixel = 4; bytesPerPixel = 4;
} else if (buf) { } else {
const ptr = TessModule._malloc(buf.length * Uint8Array.BYTES_PER_ELEMENT); const ptr = TessModule._malloc(buf.length * Uint8Array.BYTES_PER_ELEMENT);
TessModule.HEAPU8.set(buf, ptr); TessModule.HEAPU8.set(buf, ptr);
pix = TessModule._pixReadMem(ptr, buf.length); pix = TessModule._pixReadMem(ptr, buf.length);
@ -54,8 +44,6 @@ module.exports = (TessModule, api, image) => {
.map((v, idx) => ( .map((v, idx) => (
TessModule.getValue(pix + (idx * 4), 'i32') TessModule.getValue(pix + (idx * 4), 'i32')
)); ));
} else {
throw Error('Unsupported image data container');
} }
/* /*

4
src/worker/browser/loadImage.js

@ -82,10 +82,6 @@ const loadImage = async (image) => {
img = await fixOrientationFromUrlOrBlobOrFile(img); img = await fixOrientationFromUrlOrBlobOrFile(img);
} }
data = await readFromBlobOrFile(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); return new Uint8Array(data);

Loading…
Cancel
Save