From b0230472d50d8449f9168d57104098791c1757c8 Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Thu, 5 Jul 2018 13:33:07 +0800 Subject: [PATCH] Export isSlimSkin function --- src/skinview3d.js | 22 +++++++++++++++++++--- src/utils.js | 26 ++++++++++++++++++-------- types/skinview3d.d.ts | 1 + types/utils.d.ts | 1 + 4 files changed, 39 insertions(+), 11 deletions(-) create mode 100644 types/utils.d.ts diff --git a/src/skinview3d.js b/src/skinview3d.js index f4069d9..5e4a698 100644 --- a/src/skinview3d.js +++ b/src/skinview3d.js @@ -1,6 +1,18 @@ -export { SkinObject, CapeObject, PlayerObject } from "./model"; -export { SkinViewer } from "./viewer"; -export { OrbitControls, createOrbitControls } from "./orbit_controls"; +export { + SkinObject, + CapeObject, + PlayerObject +} from "./model"; + +export { + SkinViewer +} from "./viewer"; + +export { + OrbitControls, + createOrbitControls +} from "./orbit_controls"; + export { invokeAnimation, CompositeAnimation, @@ -8,3 +20,7 @@ export { RunningAnimation, RotatingAnimation } from "./animation"; + +export { + isSlimSkin +} from "./utils"; diff --git a/src/utils.js b/src/utils.js index d9039a4..b24dc81 100644 --- a/src/utils.js +++ b/src/utils.js @@ -115,7 +115,7 @@ function loadCapeToCanvas(canvas, image) { context.drawImage(image, 0, 0, image.width, image.height); } -function isSlimSkin(canvas) { +function isSlimSkin(canvasOrImage) { // Detects whether the skin is default or slim. // // The right arm area of *default* skins: @@ -157,13 +157,23 @@ function isSlimSkin(canvas) { // If there is a transparent pixel in any of the 4 unused areas, the skin must be slim, // as transparent pixels are not allowed in the first layer. - let scale = computeSkinScale(canvas.width); - let context = canvas.getContext("2d"); - let checkArea = (x, y, w, h) => hasTransparency(context, x * scale, y * scale, w * scale, h * scale); - return checkArea(50, 16, 2, 4) || - checkArea(54, 20, 2, 12) || - checkArea(42, 48, 2, 4) || - checkArea(46, 52, 2, 12); + if (canvasOrImage instanceof HTMLCanvasElement) { + let canvas = canvasOrImage; + let scale = computeSkinScale(canvas.width); + let context = canvas.getContext("2d"); + let checkArea = (x, y, w, h) => hasTransparency(context, x * scale, y * scale, w * scale, h * scale); + return checkArea(50, 16, 2, 4) || + checkArea(54, 20, 2, 12) || + checkArea(42, 48, 2, 4) || + checkArea(46, 52, 2, 12); + } else if (canvasOrImage instanceof HTMLImageElement) { + let image = canvasOrImage; + let canvas = document.createElement("canvas"); + loadSkinToCanvas(canvas, image); + return isSlimSkin(canvas); + } else { + throw `Illegal argument: ${canvasOrImage}`; + } } export { isSlimSkin, loadSkinToCanvas, loadCapeToCanvas }; diff --git a/types/skinview3d.d.ts b/types/skinview3d.d.ts index befec93..8d093fc 100644 --- a/types/skinview3d.d.ts +++ b/types/skinview3d.d.ts @@ -2,3 +2,4 @@ export * from "./model"; export * from "./animation"; export * from "./viewer"; export * from "./orbit_controls"; +export * from "./utils"; diff --git a/types/utils.d.ts b/types/utils.d.ts new file mode 100644 index 0000000..26be80c --- /dev/null +++ b/types/utils.d.ts @@ -0,0 +1 @@ +export function isSlimSkin(skinImage: HTMLImageElement): boolean;