当前位置: 首页 > article >正文

vue3页面显示tiff图片

浏览器网页一般不直接支持tiff图片的显示,需要用到tiff.js这个库,首先安装tiff.js,使用命令 npm install tiff.js安装。

首先,引入相关库

import axios from 'axios';
import { ref } from 'vue';
import {TIFF } from 'tiff.js'

在vue中定义能显示图片的容器,与Vue的imgDB变量绑定,如下代码:

<template><img class="db1" :src="imgDB" alt="000" />
</template>

定义变量,其中变量imgDB与图片显示的<img>绑定一块,变量imgUrl存放了tif图片的访问地址。代码如下:

const imgDB= ref('');
const imgUrl='http://192.168.66.1/images/10.tif';

需要注意的是imgUrl是经过Ngnix代理后的地址,Vue请求Ngnix要面临一个跨域的问题,这就需要设置Ngnix的ngnix.conf配置文件,如下:

#图片代理路径
location /images/ {alias  C:/Users/wchw/Desktop/share/;autoindex on;# 添加 CORS 头add_header 'Access-Control-Allow-Origin' '*' always;add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;add_header 'Access-Control-Allow-Headers' 'DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type' always;add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;# 处理 OPTIONS 请求#if ($request_method = OPTIONS) {#    add_header 'Access-Control-Allow-Origin' '*' always;#    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;#    add_header 'Access-Control-Allow-Headers' 'DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type' always;#    return 204;#}
}

下面是转换tiff图片的函数,如下:

function setImg(imgUrl) {window.Tiff.initialize({ TOTAL_MEMORY: 1024 * 1024 * 1024 });axios.get(imgUrl, { responseType: 'blob' }).then(response => {response.data.arrayBuffer().then((arrayBuffer) => {const tiff = new window.Tiff({buffer: arrayBuffer,});imgDB.value = tiff.toDataURL()})}).catch(error => {console.error('Error fetching data:', error);});
}

如果图片过大,比如几百兆,现实就有困难,可以对图片进行一定的压缩,代码如下:

function setImg(imgUrl) {window.Tiff.initialize({ TOTAL_MEMORY: 1024 * 1024 * 1024 });axios.get(imgUrl, { responseType: 'blob' }).then(response => {response.data.arrayBuffer().then((arrayBuffer) => {const tiff = new window.Tiff({buffer: arrayBuffer,});// 创建一个新的 Canvas 元素用于生成缩略图let canvas = document.createElement("canvas");let ctx = canvas.getContext("2d");// 获取 TIFF 图像的宽度和高度let width = tiff.width();let height = tiff.height();// 设定缩略图的尺寸,比如设置为原图的 1/30 大小let thumbnailWidth = width / 30;let thumbnailHeight = height / 30;// 调整 Canvas 的大小为缩略图大小canvas.width = thumbnailWidth;canvas.height = thumbnailHeight;console.log("--------->width:"+width+", height:"+height);// 绘制缩小后的图像到 Canvas 中ctx.drawImage(tiff.toCanvas(), 0, 0, thumbnailWidth, thumbnailHeight);imgDB.value = canvas.toDataURL(); // 转换为 Base64 的缩略图// imgDB.value = tiff.toDataURL()})}).catch(error => {console.error('Error fetching data:', error);});
}

最后完整的代码如下:

<script setup>import axios from 'axios';import { ref } from 'vue';import {TIFF } from 'tiff.js'const imgDB= ref('');const imgUrl='http://192.168.66.1/images/10.tif';setImg(imgUrl);function setImg(imgUrl) {window.Tiff.initialize({ TOTAL_MEMORY: 1024 * 1024 * 1024 });axios.get(imgUrl, { responseType: 'blob' }).then(response => {response.data.arrayBuffer().then((arrayBuffer) => {const tiff = new window.Tiff({buffer: arrayBuffer,});// 创建一个新的 Canvas 元素用于生成缩略图let canvas = document.createElement("canvas");let ctx = canvas.getContext("2d");// 获取 TIFF 图像的宽度和高度let width = tiff.width();let height = tiff.height();// 设定缩略图的尺寸,比如设置为原图的 1/30 大小let thumbnailWidth = width / 30;let thumbnailHeight = height / 30;// 调整 Canvas 的大小为缩略图大小canvas.width = thumbnailWidth;canvas.height = thumbnailHeight;console.log("--------->width:"+width+", height:"+height);// 绘制缩小后的图像到 Canvas 中ctx.drawImage(tiff.toCanvas(), 0, 0, thumbnailWidth, thumbnailHeight);imgDB.value = canvas.toDataURL(); // 转换为 Base64 的缩略图// imgDB.value = tiff.toDataURL()})}).catch(error => {console.error('Error fetching data:', error);});}
</script><template><img class="db1" :src="imgDB" alt="000" />
</template>

相关文章:

vue3页面显示tiff图片

浏览器网页一般不直接支持tiff图片的显示&#xff0c;需要用到tiff.js这个库&#xff0c;首先安装tiff.js&#xff0c;使用命令 npm install tiff.js安装。 首先&#xff0c;引入相关库 import axios from axios; import { ref } from vue; import {TIFF } from tiff.js 在v…...

玩转 Java 与 Python 交互,JEP 库来助力

文章目录 玩转 Java 与 Python 交互&#xff0c;JEP 库来助力一、背景介绍二、JEP 库是什么&#xff1f;三、如何安装 JEP 库&#xff1f;四、JEP 库的简单使用方法五、JEP 库的实际应用场景场景 1&#xff1a;数据处理场景 2&#xff1a;机器学习场景 3&#xff1a;科学计算场…...

【单片机毕业设计14-基于stm32c8t6的智能宠物养护舱系统设计】

【单片机毕业设计14-基于stm32c8t6的智能宠物养护舱系统设计】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇14-基于stm32c8t6的智能宠物养护舱系统设计 &#x1f9ff;创作不易&#xff0c;拒绝白嫖可私 一、功…...

ASUS/华硕天选4 Plus 锐龙版 FA507X FA707X 原厂Win11 22H2专业版系统 工厂文件 带ASUS Recovery恢复

华硕工厂文件恢复系统 &#xff0c;安装结束后带隐藏分区&#xff0c;带一键恢复&#xff0c;以及机器所有的驱动和软件。 支持型号&#xff1a;FA507XU FA507XV FA507XQ FA507XJ FA507XI, FA707XV, FA707XU, FA707XQ, FA707XJ, FA707XI, FA707XIN 系统版本&#xff1a;Windo…...

从头再来!社招找工作——算法题复习九:动态规划

从头再来&#xff01;社招找工作——算法题复习九&#xff1a;动态规划 动态规划斐波那数列跳台阶跳台阶/爬楼梯最小花费跳台阶 最长公共子序列矩阵矩阵路线总数矩阵路线总数有障碍物矩阵的最小路径和三角形的最小路径和 买卖股票的最佳时机&#xff08;T1天 / 当日不可卖&…...

检测服务端口是否开放的常用方法

检测服务端口是否开放的常用方法 文章目录 检测服务端口是否开放的常用方法背景使用nc命令使用 telnet 命令使用 curl 命令使用 openssl 命令使用 Python 脚本,socket连接使用 bash 内建命令:使用 nmap:总结 背景 有时候需要测试网络是否连通&#xff0c;端口是否开放&#xf…...

23贪心算法

分发饼干 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {int i0,j0;int count0;sort(s.begin(),s.end());sort(g.begin(),g.end());while(i<g.size()&&j<s.size()){if(g[i]<s[j]){i;j;count;}else…...

网站快速收录:如何优化网站404页面?

优化网站404页面是提升用户体验和SEO效果的重要一环。以下是一些优化404页面的建议&#xff1a; 一、设计友好的404页面 简洁明了的提示信息&#xff1a;使用清晰的语言告诉用户该页面不存在或已被删除&#xff0c;避免使用过于技术化的术语。 提供导航链接&#xff1a;在40…...

DevEco Studio常用快捷键以及如何跟AndroidStudio的保持同步

DevEco Studio快捷键 DevEco Studio是华为推出的用于开发HarmonyOS应用的集成开发环境&#xff0c;它提供了丰富的快捷键以提高开发效率&#xff0c;以下为你详细介绍不同操作场景下的常用快捷键&#xff1a; 通用操作快捷键 操作描述Windows/Linux 快捷键Mac 快捷键打开设置窗…...

Ubuntu服务器 /data 盘需要手动挂载的解决方案

服务器 /data 盘需要手动挂载的解决方案 如果重启服务器后&#xff0c;发现 /data 盘 没有自动挂载&#xff0c;通常是因为&#xff1a; /etc/fstab 配置文件 没有正确设置 自动挂载。该磁盘 没有被正确识别&#xff0c;需要手动挂载。文件系统错误 导致挂载失败。 下面是解…...

[Windows] 全国油价实时查询,可具体到城市

[Windows] 全国油价实时查询&#xff0c;可具体到城市 链接&#xff1a;https://pan.xunlei.com/s/VOJnS3aOPeBwGaSvS0O0E1hwA1?pwdx83j# 出于代码练习的目的&#xff0c;调用公共免费api做的py程序&#xff0c;已经一键打包&#xff0c;双击启动即可 使用&#xff1a;选择…...

香橙派/树莓派 利用Wiring库 使用GPIO模拟PWM

香橙派或者树莓派 等开发板&#xff0c;本身带有硬件PWM,比如香橙派3 lts版&#xff0c;但是这个引脚不符合我的项目需求&#xff0c;我需要外接一个电机&#xff0c;在检测到人脸的时候 转动&#xff0c;但是这个硬件引脚&#xff0c;只要上电就开始输出pwm 信号&#xff0c;导…...

【CSS】---- CSS 变量,实现样式和动画函数复用

1. 前言 本文介绍 CSS 的自定义属性(变量)来实现样式、动画等 CSS 的复用。都是知道在 CSS 和 JS 复用一个很重要的事情,比如 JS 的函数封装,各个设计模式的使用等等,CSS 中样式的复用,同样重要。MDN 使用 CSS 自定义属性(变量):自定义属性(有时候也被称作CSS 变量或…...

C#实现Modbus TCP 通讯测试软件

C#实现Modbus TCP 通讯测试软件&#xff0c;源码&#xff0c;包括读写功能。 文件列表 WindowsFormsApplication6/WindowsFormsApplication6.sln , 1041 WindowsFormsApplication6/WindowsFormsApplication6.v12.suo , 39936 WindowsFormsApplication6/WindowsFormsApplicati…...

装修流程图: 装修前准备 → 设计阶段 → 施工阶段 → 安装阶段 → 收尾阶段 → 入住

文章目录 引言I 毛坯房装修的全流程**1. 装修前准备****1.1 确定装修预算****1.2 选择装修方式****1.3 选择装修公司****1.4 办理装修手续****2. 设计阶段****2.1 量房****2.2 设计方案****2.3 确认方案****3. 施工阶段****3.1 主体拆改****3.2 水电改造****3.3 防水工程****3.…...

Windows逆向工程入门之串流操作指令解析与拓展

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 1. 串流操作指令简介 2. 串流指令及其操作解析 2.1 DF&#xff08;方向标志&#xff09; 设置和清除 2.2 STOS&#xff08;存储串操作&#xff09; 指令格式 操作过程 应用场景 …...

【论文解读】《Training Large Language Models to Reason in a Continuous Latent Space》

论文链接 1. 背景与动机 语言空间与推理的矛盾 目前大多数大语言模型&#xff08;LLMs&#xff09;在解决复杂问题时采用链式思维&#xff08;Chain-of-Thought, CoT&#xff09;方法&#xff0c;即利用自然语言逐步推导出答案。然而&#xff0c;论文指出&#xff1a; 自然语言…...

topN 相似度 torch实现

目录 优化版,去重相似度 topN 欧式距离版 没有去重复, 优化版,去重相似度 import torch import torch.nn.functional as F torch.manual_seed(42) # 假设 10 条数据,每条数据的特征维度是 128 data = torch.randn(10, 128)# 计算所有数据对之间的余弦相似度 cosine_simi…...

深度剖析 C 语言函数递归:原理、应用与优化

在 C 语言的函数世界里&#xff0c;递归是一个独特且强大的概念。它不仅仅是函数调用自身这么简单&#xff0c;背后还蕴含着丰富的思想和广泛的应用。今天&#xff0c;让我们跟随这份课件&#xff0c;深入探索函数递归的奥秘。 一、递归基础&#xff1a;概念与思想 递归是一种…...

goredis常见基础命令

基本操作 //删除键 exists,err: rdb.Exists(ctx,"key").Result() if err!nil{panic(err) } if exists>0{err rdb.Del(ctx,"key").Err()if err!nil{panic(err)} }string类型 //设置一个键值对 //0表示没有过期时间 err:rdb.Set(ctx,"key1",…...

【Linux网络】序列化、守护进程、应用层协议HTTP、Cookie和Session

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、序列化和反序列化2、守护进程2.1 什么是进程组&#xff1f;2.2 什么是会话&#xff1f; 3、应用层协议HTTP3.1 HTTP协议3.2 HT…...

JavaScript函数-arguments的使用

在JavaScript编程语言中&#xff0c;函数是构建复杂逻辑和实现代码复用的关键组件。虽然现代JavaScript&#xff08;尤其是ES6及之后版本&#xff09;提供了更多灵活的方式来处理函数参数&#xff08;如剩余参数、默认参数等&#xff09;&#xff0c;但arguments对象仍然是一个…...

Hadoop常用操作命令

在NameNode节点格式化集群 初始化集群 hdfs namenode -format启动HDFS sbin/start-dfs.sh启动yarn sbin/start-yarn.sh启动NodeManager yarn-daemon.sh start nodemanager启动DataNode hadoop-daemon.sh start datanode启动SecondaryNameNode hadoop-daemon.sh start se…...

system verilog的流操作符

流操作符&#xff0c;有分为操作对象是一整个数组和单独的数据两种&#xff0c;例如bit [7:0] a[4]和bit [31:0] b&#xff0c;前者操作对象是数组&#xff0c;后者是单独一个较大位宽的数。 流操作符有<<和>>&#xff0c;代表从右向左打包和从左向右打包。 打包的…...

LLM2CLIP论文学习笔记:强大的语言模型解锁更丰富的视觉表征

1. 写在前面 今天分享的一篇论文《LLM2CLIP: P OWERFUL L ANGUAGE M ODEL U NLOCKS R ICHER V ISUAL R EPRESENTATION》&#xff0c; 2024年9月微软和同济大学的一篇paper&#xff0c; 是多模态领域的一篇工作&#xff0c;主要探索了如何将大模型融合到Clip模型里面来进一步提…...

计算机毕业设计SpringBoot+Vue.jst网上超市系统(源码+LW文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

python-静态方法和类方法

Java之类的编程语言还带有静态方法&#xff0c;Python类也拥有与静态方法明确对应的方法。此外&#xff0c;Python还拥有类方法&#xff0c;要比静态方法更高级一些。 静态方法与Java一样&#xff0c;即便没有创建类的实例&#xff0c;静态方法也是可以调用的&#xff0c;当然…...

什么是手机9008模式?如何进入9008

之前给大家分享了一些有关手机刷机的知识&#xff0c;今天给大家讲一讲如果刷机过程中不慎变砖应该如何应对&#xff08;当然了&#xff0c;希望大家都不会遇到&#xff09;&#x1f602;&#x1f604; 在给手机 Root 或刷机时&#xff0c;线刷 9008 指的是利用 高通 9008 模式…...

嵌入式之指针

在嵌入式系统中指针是一种非常重要的概念。它们用于直接访问内存地址&#xff0c;能够提高程序的灵活性和效率。 一、基本概念 1. 指针的基本概念 定义&#xff1a;指针是一个变量&#xff0c;其值为另一个变量的地址。通过指针&#xff0c;可以间接访问和修改该变量的值。声…...

网络安全研究

1.1 网络安全面临的威胁 网络安全面临的威胁呈现出多样化和复杂化的趋势&#xff0c;给个人、企业和国家的安全带来了严峻挑战。以下是当前网络安全面临的主要威胁&#xff1a; 1.1.1 数据泄露风险 数据泄露是当前网络安全的重大威胁之一。根据国家互联网应急中心发布的《20…...