mirror of
https://github.com/serratus/quaggaJS.git
synced 2026-08-12 21:21:42 +08:00
Capturing images respecting their orientation
This commit is contained in:
@@ -41,6 +41,39 @@ function getOrCreateCanvas(source, target) {
|
||||
return $canvas;
|
||||
}
|
||||
|
||||
function drawImage(
|
||||
canvasSize,
|
||||
ctx,
|
||||
source,
|
||||
type,
|
||||
drawable,
|
||||
...drawImageArgs,
|
||||
) {
|
||||
let drawAngle = 0;
|
||||
if (source.type === 'IMAGE') {
|
||||
if (source.tags && source.tags.orientation) {
|
||||
switch(source.tags.orientation) {
|
||||
case 6:
|
||||
drawAngle = 90 * TO_RADIANS;
|
||||
break;
|
||||
case 8:
|
||||
drawAngle = -90 * TO_RADIANS;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (drawAngle !== 0) {
|
||||
ctx.translate(canvasSize.width / 2, canvasSize.height / 2);
|
||||
ctx.rotate(drawAngle);
|
||||
ctx.drawImage(drawable, -canvasSize.height / 2, -canvasSize.width / 2, canvasSize.height, canvasSize.width);
|
||||
ctx.rotate(-drawAngle);
|
||||
ctx.translate(-canvasSize.width / 2, -canvasSize.height / 2);
|
||||
} else {
|
||||
ctx.drawImage(drawable, ...drawImageArgs);
|
||||
}
|
||||
}
|
||||
|
||||
export function fromSource(source, {target = "#interactive.viewport"} = {}) {
|
||||
var drawable = source.getDrawable();
|
||||
var $canvas = null;
|
||||
@@ -61,8 +94,6 @@ export function fromSource(source, {target = "#interactive.viewport"} = {}) {
|
||||
return new Uint8Array(aquire(bytesRequired));
|
||||
}
|
||||
|
||||
|
||||
|
||||
return {
|
||||
grabFrameData: function grabFrameData({clipping} = {}) {
|
||||
const {viewport, canvas: canvasSize} = source.getDimensions();
|
||||
@@ -87,8 +118,22 @@ export function fromSource(source, {target = "#interactive.viewport"} = {}) {
|
||||
if ($canvas.height < 10 || $canvas.width < 10) {
|
||||
return sleep(100).then(grabFrameData);
|
||||
}
|
||||
|
||||
if (!(drawable instanceof HTMLCanvasElement)) {
|
||||
ctx.drawImage(drawable, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);
|
||||
drawImage(
|
||||
canvasSize,
|
||||
ctx,
|
||||
source,
|
||||
drawable,
|
||||
sx,
|
||||
sy,
|
||||
sWidth,
|
||||
sHeight,
|
||||
dx,
|
||||
dy,
|
||||
dWidth,
|
||||
dHeight
|
||||
);
|
||||
}
|
||||
var imageData = ctx.getImageData(
|
||||
clipping.x,
|
||||
|
||||
Reference in New Issue
Block a user