1.0.8 • Published 5 months ago

ecg-api v1.0.8

Weekly downloads
-
License
ISC
Repository
-
Last release
5 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

5 months ago

1.0.7

6 months ago

1.0.6

6 months ago

1.0.5

6 months ago

1.0.4

7 months ago

1.0.3

7 months ago

1.0.2

7 months ago

1.0.1

7 months ago

1.0.0

7 months ago