1.0.8 • Published 9 months ago

ecg-api v1.0.8

Weekly downloads
-
License
ISC
Repository
-
Last release
9 months ago

画心电图插件

支持环境

  • web
  • uni
  • wx

下载插件

npm i ecg-api

EcgApi参数结构

参数说明类型可选值默认值
type在什么环境下使用'uni'或'wx'或'web''uni'或'wx'或'web'-
props心电配置参数PropsApi请参考下面的PropsApi配置-

PropsApi参数结构

参数类型环境是否必传说明
ctxCanvasRenderingContext2D或UniApp.CanvasContext全部canvas的画笔对象
canvasIdstringuniapp或wx如果要获取图片就需要传canvas的canvas-id
canvasToTempFilePath(uni或wx).canvasToTempFilePathuniapp或wx如果要获取图片就需要传
widthnumber全部canvas的宽度
heightnumber全部canvas的高度
multiplenumber全部整体倍数
textFontSizenumber全部字体大小
backgroundColorstring全部背景颜色
hasStartboolean全部心电图默认开头,实时心电图无效
xAxisboolean或xAxisApi全部x轴刻度配置
bigCell.countnumber全部横排大格子的个数
bigCell.colorstring全部大格子线的颜色
bigCell.lineWidthnumber全部大格子线的宽度
smallCell.countnumber全部每个大格子中小格子的个数
smallCell.colorstring全部小格子线的颜色
smallCell.lineWidthnumber全部小格子线的宽度
ecg.timeLongnumber全部心电图总的时长
ecg.colorstring全部心电图线的颜色
ecg.lineWidthnumber全部心电图线的宽度
ecg.gainnumber全部心电图增益,默认:10
ecg.speednumber全部心电图走纸速度

xAxisApi参数结构

参数类型环境是否必传说明
fontSizenumber全部x轴的字体大小
textColorstring全部x轴的字体的颜色
lineWidthnumber全部x轴的线的宽度
colorstring全部x轴线的颜色

Methods方法

方法名说明类型
start画线格子()=>this
drawECG开始绘制静态心电图,isFragment是否分片绘制,getImg是否返回图片地址(isFragment:boolean = false, getImg:boolean = true)=> Promise<string[]>/Promise
setBigCellYCount设置每排心电图大格子数,增益10对应2, 5对应1,其他的安倍数来(num:number)=>this
setGain设置增益(num:number)=>this
setSpeed设置走纸速度(num:number)=>this
setWhScale设置canvas的宽高比,计算高度需要(num:number)=>this
setData设置绘制的全部数据(data:string[])=>this
addDataToDraw实时心电图添加数据,同时会出发绘制(data: string[])=>this
computedMinHeight计算心电图高度,isFragment是否分片绘制(isFragment: boolean = false)=>height
stopContinueDraw实时心电图停止绘画()=>this
setHeight设置高度(height:number)=>this
destroy销毁组件()=>void

h5实时心电图

import {EcgApi} from "ecg-api";
const devicePixelRatio = window.devicePixelRatio||1;
const canvas = document.createElement("canvas");
const canvasView = document.getElementById('canvasView'); // 获取canvas的父元素
// canvas要显示的大小
canvas.style.width= canvasView.offsetWidth+'px';
canvas.style.height= canvasView.offsetHeight+'px';
// 防止模糊,按设备屏幕分配率放大
canvas.width = canvasView.offsetWidth*devicePixelRatio;
canvas.height = canvasView.offsetHeight*devicePixelRatio;
canvasView.appendChild(canvas); // 加入需要显示的位置
const ctx = canvas.getContext('2d');
ecgObj.value = new EcgApi('web',{
    ctx, //canvas.getContext('2d');
    multiple:devicePixelRatio, // 倍数防模糊
    width:canvas.width,
    height:canvas.height,
    ecg:{ // 心电图的配置
        color:'rgba(0,0,0,0.5)',
        lineWidth:1,
    },
    bigCell:{ // 大格子的配置
        count:15,
    },
    smallCell:{ // 小格子的配置
        count:5,
    },
    gain:30, // 增益
    translateY:2, // 向下移动2个大格子
    backgroundColor:'#FFF6F6', // 背景颜色
}).start(); // 画格子
ecgObj.value?.addDataToDraw([1,2,3]); // 实时添加数据,会自动绘图

ecgObj.value?.stopContinueDraw(); // 停止绘画
// 销毁
ecgObj.value?.destroy();
ecgObj.value = undefined;

h5生成心电图

import {EcgApi} from "ecg-api";
canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
// 注意,增益发生变化时需要重新设置setBigCellYCount,且重新计算高度和获取图片
const multiple = 1.5*(window.devicePixelRatio||1);
canvas.value = document.createElement('canvas');
canvas.value.width = data.width*multiple;
const ctx = canvas.value.getContext('2d');
ecgObj.value = new EcgApi('web',{
    ctx,
    multiple,
    width:canvas.value.width,
    ecg:{
        timeLong:70, // 时长
    },
    bigCell:{
        count:31,
    },
    smallCell:{
        count:5,
    },
    backgroundColor:'#FFF6F6',
    hasStart:true, // 显示心电默认开头
    xAxis:true, // 显示横坐标的刻度
    textFontSize:5 //字体大小
})
// 下面setBigCellYCount、setGain、setSpeed这个3个如果是该值可以不传,默认值就是这个
ecgObj.value.setBigCellYCount(2) // 设置每排心电图的大格子个数,增益10对应2, 5对应1,20对应4,其他的安倍数来
.setGain(10) // 设置增益
.setSpeed(25); // 设置速度
.setWhScale(data.width/data.height); // 设置canvas的宽高比,后面要根据这个计算高度
.setData([]); // 设置绘制的数据
//是不是分片的
const isFragment = true;
// 计算高度
const h = ecgObj.value.computedMinHeight(isFragment);
canvas.value.height = h;
// 生成的心电图,分片返回的数组,反之返回的字符串,报错就不一样了
const arr = await ecgObj.value.drawECG(isFragment);
console.log(arr)

uniapp生成心电图

import {EcgApi} from "ecg-api";
<template>
    <canvas :canvas-id="canvasId" :style="{width, height}"></canvas>
</template>
// script
const multiple = 1.5;
const width = ref(0);
const height = ref(0);
const canvasId ="myCanvas"
const query = uni.createSelectorQuery().in(_this);
query
.select(".psy-img-vt")
.boundingClientRect((data) => { // 这主要是获取父元素的宽度
    const ctx = uni.createCanvasContext(canvasId, _this);
    width.value = data.width+'px';
    ecgObj.value = new EcgApi('uni',{
        canvasId,
        ctx,
        multiple,
        width:data.width,
        ecg:{
            timeLong:70, // 时长
        },
        bigCell:{
            count:31,
        },
        smallCell:{
            count:5,
        },
        backgroundColor:'#FFF6F6',
        hasStart:true,
        xAxis:true,
        textFontSize:5,
        canvasToTempFilePath:uni.canvasToTempFilePath
    })
    ecgObj.value.setBigCellYCount(2) // 设置每排心电图的大格子个数,增益10对应2, 5对应1,20对应4,其他的安倍数来
    .setGain(10) // 设置增益
    .setSpeed(25); // 设置速度
    .setWhScale(data.width/data.height); // 设置canvas的宽高比,后面要根据这个计算高度
    .setData([]); // 设置绘制的数据
})
//是不是分片的
const isFragment = false;
// 计算高度
let h = ecgObj.value?.computedMinHeight(isFragment);
height.value = h+'px';
// 给时间让canvas响应
const t = setTimeout(async()=>{
    // 生成的心电图,分片返回的数组,反之返回的字符串,报错就不一样了
    const arr = await ecgObj.value.drawECG(isFragment);
    console.log(arr)
},200)

uniapp实时心电图参考h5的,替换ctx就行

wx同uniapp一样

注意:如果是手机显示模糊不清,需要获取手机的devicePixelRatio,通过multiple传进去

示例图片

生成的心电图

1.0.8

9 months ago

1.0.7

10 months ago

1.0.6

10 months ago

1.0.5

10 months ago

1.0.4

10 months ago

1.0.3

10 months ago

1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago