基于Vue+OpenSeaDragon的数字细胞阅片开发
前端框架:
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的数字细胞阅片开发的更多相关文章
- 基于Vue、web3的以太坊项目开发及交易内幕初探 错误解决总结
基于Vue.web3的以太坊项目开发及交易内幕初探 本文通过宏观和微观两个层面窥探以太坊底层执行逻辑. 宏观层面描述创建并运行一个小型带钱包的发币APP的过程,微观层面是顺藤摸瓜从http api深入 ...
- 基于 vue+vue-router+vuex+axios+koa+koa-router 本地开发全栈项目
因为毕业设计要做基于Node服务器的项目,所以我就想着用刚学的vue作为前端开发框架,vue作为Vue.js应用程序的状态管理模式+库,axios基于promise用于浏览器和node.js的http ...
- 使用基于Vue.js和Hbuilder的混合模式移动开发打造属于自己的移动app
近几年,混合模式移动应用的概念甚嚣尘上,受到了一些中小型企业的青睐,究其原因,混合模式开发可以比传统移动开发节约大量的开发成本和人力成本. Hybrid App(混合模式移动应用)是指介于web-ap ...
- 使用webpack4搭建一个基于Vue的组件库
组内负责的几个项目都有一些一样的公共组件,所以就着手搭建了个公共组件开发脚手架,第一次开发 library,所以是参考着 iview 的配置来搭建的.记录如何使用webpack4搭建一个library ...
- 基于HBuilderX+UniApp+ThorUI的手机端前端开发处理
现在的很多程序应用,基本上都是需要多端覆盖,因此基于一个Web API的后端接口,来构建多端应用,如微信.H5.APP.WInForm.BS的Web管理端等都是常见的应用.本篇随笔概括性的介绍基于HB ...
- 基于Vue的数字输入框组件开发
1.概述 Vue组件开发的API:props.events和slots 2.组件代码 github地址:https://github.com/MengFangui/VueInputNumber 效果: ...
- 「免费开源」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之自定义组件(四)
基于Vue和Quasar的前端SPA项目实战之序列号(四) 回顾 通过上一篇文章 基于Vue和Quasar的前端SPA项目实战之布局菜单(三)的介绍,我们已经完成了布局菜单,本文主要介绍序列号功能的实 ...
- 基于Verilog HDL 的数字时钟设计
基于Verilog HDL的数字时钟设计 一.实验内容: 利用FPGA实现数字时钟设计,附带秒表功能及时间设置功能.时间设置由开关S1和S2控制,分别是增和减.开关S3是模式选择:0是正常时钟 ...
- 一次基于Vue.Js用户体验的优化
.mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...
- 发布自己第一个npm 组件包(基于Vue的文字跑马灯组件)
一.前言 总结下最近工作上在移动端实现的一个跑马灯效果,最终效果如下: 印象中好像HTML标签的'marquee'的直接可以实现这个效果,不过 HTML标准中已经废弃了'marquee'标签 既然HT ...
随机推荐
- [FAQ] 英文字母输入时变成了胖体
如下,在输入法上右键,切换为 "半角" 即可. Link:https://www.cnblogs.com/farwish/p/17513598.html
- Python:Short Circuiting -- “OR”
Short Circuiting Operator Checks if: Evaluates from left to right up to: Example AND All values are ...
- dotnet C# 基础 为什么 GetHashCode 推荐只取只读属性或字段做哈希值
在 C# 里面,所有的对象都继承 Object 类型,此类型有开放 GetHashCode 用于给开发者重写.此 GetHashCode 方法推荐是在重写 Equals 方法时也同时进行重写,要求两个 ...
- 魔方OA 数据字典
https://gitee.com/mojocube/mc-oa/blob/master/Data/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%84%9A%E6%9C%AC.sql ...
- 集群监管-USDP(智能大数据平台)
UCloud Smart Data Platform(简称 USDP),是 UCloud 推出的智能化.轻量级.适用于私有化部署至客户本地的大数据基础服务平台,通过自研的 USDP Manager 管 ...
- Git——关于Git的一些补充(1)
Git--关于Git的一些补充(1) 提示:图床在国外且动图比较多的情况下,需要时间加载. 目录: 目录 Git--关于Git的一些补充(1) 提示:图床在国外且动图比较多的情况下,需要时间加载. 目 ...
- 《最新出炉》系列入门篇-Python+Playwright自动化测试-43-分页测试
1.简介 分页测试,这种一般都是公共的方法系统中都写好了,这种一般出现是数据展示比较多的时候,会采取分页的方法,而且比较固定,一般是没有问题的,因此它非常适合自动化测试,但是如何使用playwrigh ...
- Pytorch入门—Tensors张量的学习
Tensors张量的学习 张量是一种特殊的数据结构,与数组和矩阵非常相似.在PyTorch中,我们使用张量来编码模型的输入和输出,以及模型的参数. 张量类似于NumPy的ndarrays,只是张量可以 ...
- 06 curl 操作elasticsearch的CRUD
目录 查看健康状态 查询当前es集群中所有的indices 创建索引并配置: 创建索引 删除索引 获取mapping 创建mapping 添加字段 插入记录 检索 修改 删除 中文文档: https: ...
- 解决VMware Workstation 与 Device/Credential Guard不兼容
参考文档 https://blog.csdn.net/lizhengze1117/article/details/106566060