前端框架:

vue+elementui+openseadragon

后端

.net core 5.0

数据库

mysql

目前项目效果如图

在原有的基础上新增了阅片轨迹

图像调节,绘图,截图等功能.

另外锐化这块,目前是修改了OpenSeadragon的插件源码.不然锐化会有明显的边界分割线.

锐化会严重影响性能,目前没有什么太好的解决方法

截图功能模块:

截取当前视野,并存到后台api端

web端报告打印

基于vue-print-nb控件,实现了组件打印的控制

基于html2canvas,实现了打印的时候生成webp格式的报告截图,用于病理中心的报告存档.

通过数据库设计,实现了报告的动态电子签名、动态单/双抬头(文字or图片)的设计.

总体来说,Openseadragon是一款非常强大的tiff多层图片web端插件.

类似的还有openlayer.接触不多.资料相对来说更少.

目前主流的医疗细胞阅片,基本都是采用的openseadragon.

openseadragon初始化

<template>
<div class="app-container" style="height: calc(100vh - 86px); padding: 0px;" v-loading="loading">
<el-row :gutter="20" style="height: calc(100vh - 87px); padding: 0px" type="flex">
<div style="position: relative;float: left;flex:1">
<div class="slider" id="myslider" style="
z-index: 999;
float: left;
margin-top: 10px;
position: absolute;"></div>
<div id="openseadragon1" style="width: 100%; height: 100%; z-index: 99;"></div>
</div>
</el-row>
</div>
</template>
<!-- 省略部分代码 -->
  InitViewer: function (fileid, w, h) {
// console.log('viewImgApp',viewImgApp.data());
this.viewer = new OpenSeadragon({
id: "openseadragon1", //绑定ID
// prefixUrl: "http://localhost:6011/Content/js/openseadragon/images/", //openseadragon自带的一些图标
showNavigator: true,
navigatorPosition: "TOP_RIGHT",
gestureSettingsMouse: { clickToZoom: false }, //设置鼠标单击不可放大
navigatorWidth: 200,
navigatorHeight: 200,
// iOSDevice: true,
// useCanvas: false,
// hardwareAcceleration: false,
// colorSpace:'srgb',
// zoomPerSecond:4,///结束单个缩放动画的秒数
// gestureSettingsMouse: {
// flickEnabled:false, // 拖动手势结束时禁用动态平移效果(轻弹)
// flickMinSpeed: 1, // 拖动结束动态平移效果的时间
// flickMomentum:1, // 拖动结束动态平移效果的距离
// },
// springStiffness:999, //缩放过渡效果,,值越小,则动画越趋于柔和
animationTime: 1, //放大或缩小动画过渡的时间,这个值越小,过渡快
animationZoomTime: 1,
navigatorSizeRatio: 0.2, //导航的大小与整体视图的比例 , 如果设置了导航的宽高 则忽略此属性
navigatorMaintainSizeRatio: true, // 当容器大小改变时,是否自动缩放导航图的大小,此属性依赖上一属性
navigatorAutoResize: true, // 根据视图自动调整导航大小 若已确定导航大小,请设置为false避免每次窗口缩放的查询 可提高性能
navigatorAutoFade: false, // 如果用户停止与视口交互,则淡化导航器迷你地图。设置为false将使导航器小地图始终可见。
navigatorBackground: "#ffffff", //导航背景色
navigatorOpacity: 1, //0.8, //导航背景透明度
navigatorBorderColor: "#ffffff", // 导航边框颜色
navigatorDisplayRegionColor: "#FF3385", //导航中,当前查看区域的边框颜色
zoomInButton: "btnzoomin",
zoomOutButton: "btnzoomout",
homeButton: "btnzoomhome", //恢复默认
fullPageButton: "btnzoomful",
smoothTileEdgesMinZoom: Infinity,////放大到最大倍率后,容器的表现形式,是否为平滑过渡,还是由原图逐渐放大到容器的宽度,这个属性会影响性能,建议使用Infinity将此属性关闭,且IOS下,设置此属性无效
smoothTileEdges: false,
debugMode: false,
//maxZoomPixelRatio:200,
defaultZoomLevel: 0.6,
// maxZoomLevel: 40,
// minZoomImageRatio:0.9,
// maxZoomPixelRatio: 100,//最大能够将图像放大为最大图像像素宽高的多少倍,为数字类型,默认为1.1.
crossOriginPolicy: true,
preserveOverlays: false, //切换图片后,仍然保留图层
preserveViewport: false, //切换阅片的时候,是否保留视窗
autoResize: true,
preserveImageSizeOnResize: true// 设置图像是否保留原图比例大小,以确保当容器被放大或者缩小时,图片被拉伸,当上一属性为true时起作用,
// debugMode: true,
});
this.viewer.scalebar({
type: OpenSeadragon.ScalebarType.MAP,
pixelsPerMeter: window.rqconfig.PIXELSPERMETER == null ? 6800000 : window.rqconfig.PIXELSPERMETER,//28985500,,//30000000, //设置像素与实际的比值 1米=?个像素
minWidth: "150px",
location: OpenSeadragon.ScalebarLocation.BOTTOM_LEFT,
xOffset: 15,
yOffset: 10,
stayInsideImage: false,
color: "rgb(0, 0, 0)",
fontColor: "rgb(0, 0, 0)",
backgroundColor: "rgba(255, 255, 255, 0.4)",
fontSize: "middle",
barThickness: 4,
});
// this.viewer.addHandler("open", function () {
// console.log("图像打开成功");
// debugger
// this.curZoom = this.viewer.viewport.getZoom(true);
// this.imgZoom = this.viewer.viewport.viewportToImageZoom(_this.curZoom);
// //这是下一步图像过滤的操作
// //active.updateFilter();
// });(
this.viewer.addHandler("open", () => {
console.log("图像打开成功");
this.curZoom = this.viewer.viewport.getZoom(true);
this.imgZoom = this.viewer.viewport.viewportToImageZoom(this.curZoom);
//这是下一步图像过滤的操作
//active.updateFilter();
});
 var url_img = window.vm.localConfig.VUE_APP_BASE_API + "/Images/TileImg/1/" + fileid + "/";
this.viewer.world.resetItems();
var tileSource = {
//装载tileSource
Image: {
xmlns: "http://schemas.microsoft.com/deepzoom/2009",
Url: url_img,
Overlap: "0",
TileSize: "256",
Format: "jpg",
autoResize: true,
Size: size_img,
},
};

配套的tiff图片上传工具,采用http的tus协议,实现了断点续传,token授权,自动根据token上传到指定云端服务器医院文件夹下.

使用wpf ,基于http 的tus协议开发.

基于Vue+OpenSeaDragon的数字细胞阅片开发的更多相关文章

  1. 基于Vue、web3的以太坊项目开发及交易内幕初探 错误解决总结

    基于Vue.web3的以太坊项目开发及交易内幕初探 本文通过宏观和微观两个层面窥探以太坊底层执行逻辑. 宏观层面描述创建并运行一个小型带钱包的发币APP的过程,微观层面是顺藤摸瓜从http api深入 ...

  2. 基于 vue+vue-router+vuex+axios+koa+koa-router 本地开发全栈项目

    因为毕业设计要做基于Node服务器的项目,所以我就想着用刚学的vue作为前端开发框架,vue作为Vue.js应用程序的状态管理模式+库,axios基于promise用于浏览器和node.js的http ...

  3. 使用基于Vue.js和Hbuilder的混合模式移动开发打造属于自己的移动app

    近几年,混合模式移动应用的概念甚嚣尘上,受到了一些中小型企业的青睐,究其原因,混合模式开发可以比传统移动开发节约大量的开发成本和人力成本. Hybrid App(混合模式移动应用)是指介于web-ap ...

  4. 使用webpack4搭建一个基于Vue的组件库

    组内负责的几个项目都有一些一样的公共组件,所以就着手搭建了个公共组件开发脚手架,第一次开发 library,所以是参考着 iview 的配置来搭建的.记录如何使用webpack4搭建一个library ...

  5. 基于HBuilderX+UniApp+ThorUI的手机端前端开发处理

    现在的很多程序应用,基本上都是需要多端覆盖,因此基于一个Web API的后端接口,来构建多端应用,如微信.H5.APP.WInForm.BS的Web管理端等都是常见的应用.本篇随笔概括性的介绍基于HB ...

  6. 基于Vue的数字输入框组件开发

    1.概述 Vue组件开发的API:props.events和slots 2.组件代码 github地址:https://github.com/MengFangui/VueInputNumber 效果: ...

  7. 「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之自定义组件(四)

    基于Vue和Quasar的前端SPA项目实战之序列号(四) 回顾 通过上一篇文章 基于Vue和Quasar的前端SPA项目实战之布局菜单(三)的介绍,我们已经完成了布局菜单,本文主要介绍序列号功能的实 ...

  8. 基于Verilog HDL 的数字时钟设计

    基于Verilog HDL的数字时钟设计 一.实验内容:     利用FPGA实现数字时钟设计,附带秒表功能及时间设置功能.时间设置由开关S1和S2控制,分别是增和减.开关S3是模式选择:0是正常时钟 ...

  9. 一次基于Vue.Js用户体验的优化

    .mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...

  10. 发布自己第一个npm 组件包(基于Vue的文字跑马灯组件)

    一.前言 总结下最近工作上在移动端实现的一个跑马灯效果,最终效果如下: 印象中好像HTML标签的'marquee'的直接可以实现这个效果,不过 HTML标准中已经废弃了'marquee'标签 既然HT ...

随机推荐

  1. [ELK] Elasticsearch 安装/配置、启动/停止、加节点/重启

    Elasticsearch 在不同环境上支持的安装方式很多,有源码安装.二进制安装.docker安装.rpm包等管理器安装. 具体的,根据应用的实际情况选择即可. 完成可测试开发环境的建立后,需要进一 ...

  2. Pod进阶篇-Pod生命周期和健康探测以及startupProbe(6)

    一.Pod容器探测和钩子 1.1 容器钩子:postStart和preStop postStart:容器创建成功后,运行前的任务,用于资源部署.环境准备等. preStop:在容器被终止前的任务,用于 ...

  3. WebStorm2023安装prettier并生效

    1.首先去File > Settings > Plugins 里下载并install插件 Prettier 2.在settings里搜索prettier,按图片所示设置一下Apply 3. ...

  4. VMware最小化安装Centos7.6-无桌面

    目录 安装包工具 新建虚拟机 安装 centos 7.6 系统 终端登陆系统 设置ip地址 关闭防火墙 关闭 SELINUX SELINUX=enforcing 硬盘挂载 桥接上网方式 安装包工具 V ...

  5. elasticsearch 6.2.4和elasticsearch-head环境搭建 使用docker-compose方式

    elasticsearch 6.2.4和elasticsearch-head测试环境搭建 使用docker-compose方式 一 背景说明 对于新手来说搭建一个elasticsearch的测试环境稍 ...

  6. 网络安全—部署CA证书服务器

    文章目录 网络拓扑 安装步骤 安装证书系统 安装从属证书服务器 申请与颁发 申请证书 CA颁发证书 使用windows Server 2003环境 网络拓扑 两台服务器在同一网段即可,即能够互相pin ...

  7. java netty 实现 websocket 服务端和客户端双向通信 实现心跳和断线重连

    java netty 实现 websocket 服务端和客户端双向通信 实现心跳和断线重连 maven依赖 <dependency> <groupId>io.netty< ...

  8. Python:用tqdm模块绘制进度条

    在计算密集型迭代计算中,我们常常需要知道当前的迭代轮次,最传统的方法就是打印当前迭代计数器的轮数.那有没有更好的方法呢?我们可以使用tqdm模块(非py内置,需要单独按照)来在控制台绘制进度条,这样更 ...

  9. Python读Excel数据自动化填入日常办公的网页表单

      前言 本篇内容,让你完全掌握Python是如何自动化办公的~ 一.环境准备 1.1  Python 3.7.0 1.2  Pycharm  (Python 开发工具) 1.3 Selenium  ...

  10. JVM Sandbox入门详解

    一. 概述 在日常开发中,经常会接触到面向AOP编程的思想,我们通常会使用Spring AOP来做统一的权限认证.异常捕获返回.日志记录等工作.之所以使用Spring AOP来实现上述功能,是因为这些 ...