From e50cf8a25fe37bcb2730c1be53a48753b3e197e9 Mon Sep 17 00:00:00 2001 From: xzs02 Date: Tue, 22 Jan 2019 21:07:45 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3canvas=E7=9B=B8?= =?UTF-8?q?=E5=85=B3API=E4=BC=A0=E5=85=A5=E7=9A=84=E5=AE=BD=E9=AB=98?= =?UTF-8?q?=E5=80=BC=E4=B8=8D=E4=B8=BA=E6=95=B4=E6=95=B0=E6=97=B6=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E7=9A=84=E9=94=99=E8=AF=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/helpers/protocol/canvas.js | 50 ++++++++++++++++------- src/core/service/api/context/canvas.js | 9 +++- src/core/view/components/canvas/index.vue | 2 +- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/src/core/helpers/protocol/canvas.js b/src/core/helpers/protocol/canvas.js index fb9b55611..c07196005 100644 --- a/src/core/helpers/protocol/canvas.js +++ b/src/core/helpers/protocol/canvas.js @@ -1,3 +1,11 @@ +function getInt (method) { + return function (value, params) { + if (value) { + params[method] = Math.round(value) + } + } +} + export const canvasGetImageData = { canvasId: { type: String, @@ -5,19 +13,23 @@ export const canvasGetImageData = { }, x: { type: Number, - required: true + required: true, + validator: getInt('x') }, y: { type: Number, - required: true + required: true, + validator: getInt('y') }, width: { type: Number, - required: true + required: true, + validator: getInt('width') }, height: { type: Number, - required: true + required: true, + validator: getInt('height') } } @@ -32,18 +44,22 @@ export const canvasPutImageData = { }, x: { type: Number, - required: true + required: true, + validator: getInt('x') }, y: { type: Number, - required: true + required: true, + validator: getInt('y') }, width: { type: Number, - required: true + required: true, + validator: getInt('width') }, height: { - type: Number + type: Number, + validator: getInt('height') } } @@ -55,23 +71,29 @@ const fileType = { export const canvasToTempFilePath = { x: { type: Number, - default: 0 + default: 0, + validator: getInt('x') }, y: { type: Number, - default: 0 + default: 0, + validator: getInt('y') }, width: { - type: Number + type: Number, + validator: getInt('width') }, height: { - type: Number + type: Number, + validator: getInt('height') }, destWidth: { - type: Number + type: Number, + validator: getInt('destWidth') }, destHeight: { - type: Number + type: Number, + validator: getInt('destHeight') }, canvasId: { type: String, diff --git a/src/core/service/api/context/canvas.js b/src/core/service/api/context/canvas.js index 1c8872e15..3443a5506 100644 --- a/src/core/service/api/context/canvas.js +++ b/src/core/service/api/context/canvas.js @@ -682,7 +682,14 @@ export function canvasToTempFilePath ({ }) return } - imgData = new ImageData(new Uint8ClampedArray(imgData), data.width, data.height) + try { + imgData = new ImageData(new Uint8ClampedArray(imgData), data.width, data.height) + } catch (error) { + invoke(callbackId, { + errMsg: 'canvasToTempFilePath:fail' + }) + return + } var canvas = getTempCanvas() canvas.width = data.width canvas.height = data.height diff --git a/src/core/view/components/canvas/index.vue b/src/core/view/components/canvas/index.vue index f060723a6..50212e8ad 100644 --- a/src/core/view/components/canvas/index.vue +++ b/src/core/view/components/canvas/index.vue @@ -383,7 +383,7 @@ export default { }) { try { if (!height) { - height = data.length / 4 / width + height = Math.round(data.length / 4 / width) } this.$refs.canvas.getContext('2d').putImageData(new ImageData(new Uint8ClampedArray(data), width, height), x, y) } catch (error) { -- GitLab