基于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,