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

vue3-06-html2canvas使用 + zoom、transform: scale图片缩放适配方案 + 动态引入静态资源(打包上线后也能使用)

目录

  • 一、图片缩放适配方案
  • 二、html2canvas 的具体使用
  • 三、静态资源(图片)的动态引入

一、图片缩放适配方案

问题:

  • 最近写了一个vue3的快简制图项目,下载图片我用到了html2canvas
  • 当图片超出屏幕宽度后,我需要对图片进行缩放,使用zoom缩放后占位大小发生改变(占位为缩放后的大小),但是html2canvas不支持这个属性,使用这个属性后下载的图片有问题
  • 于是我又使用transform:scale缩放,这个属性html2canvas支持,但是这个缩放的占位不会发生改变,只是视觉上变小了(例如一个图片width为2000px,缩放0.5倍,视觉效果是1000px,但是实际的占位还是2000px)

解决方案:

  • 写两个一模一样的组件 picture1 和 picture2,其中 picture1 使用 zoom 缩放,显示给用户看,picture2使用 transform:scale
    缩放,然后使用绝对定位(脱标),然后让它的z-index为负数(隐藏在其他页面后面,这样用户就看不见了),最后html2canvas下载图片的时候使用picture2
  • 总结来说:就是一个组件展示给用户看,另一个组件用来的下载图片,这样不用担心缩放的一系列问题

项目地址:

二、html2canvas 的具体使用

安装:

pnpm install html2canvas

引入:

import html2canvas from 'html2canvas'

picture2.vue

	<div class="github-header-image" ref="pictureRef"></div><button @click="download">点击下载</button>......import { ref } from 'vue'import html2canvas from 'html2canvas'// 图片实例let pictureRef = ref()// 下载图片function download() {// backgroundColor:画布的背景色,null说明背景色为透明// scale:缩放比例,默认为1(保证图片显示多大,下载下来的图片就是多大)html2canvas(pictureRef.value, { backgroundColor: null, scale: 1 }).then((canvas) => {let imageURL = canvas.toDataURL('image/png')let a = document.createElement('a')a.href = imageURLa.download = 'github-header-image'a.click()pictureStore.DownloadPicture() // 下载结束}).catch((error) => {alert('下载失败')console.log(new Error(error))})}

三、静态资源(图片)的动态引入

问题: 我引入的图片路径为 ‘/src/assets/images/patterns/jigsav-thumbnail.svg’,在本地运行的时候能正常显示图片,但是当我项目打包成 dist 文件夹上线后,图片无法显示了,原因是 dist 文件夹里根本就没有这个路径(文件夹)

解决方案:

/src /utils /getAssetsFile.ts

export const getPatternFile = (url: string): string => { // 这里new URL里的第一个参数,要换成自己图片的存储目录return new URL(`../assets/images/patterns/${url}`, import.meta.url).href
}

background.vue

<template v-for="item in patternsData" :key="item.id"><img :src="item.src" :alt="item.alt" />
</template>
...// 引入获取花样显示图片的路径的方法
import { getPatternFile } from '@/utils/getAssetsFile'
// 花样数据
let patternsData = reactive([{id: 1,src: getPatternFile('jigsaw-thumbnail.svg'),},{id: 2,src: getPatternFile('github-thumbnail.svg'),}])

http://www.mrgr.cn/news/57141.html

相关文章:

  • BufferPool
  • 揭秘线程安全:HashMap 的四大实用策略
  • RISC-V笔记——内存模型总结
  • 408算法题leetcode--第38天
  • 第8节 arkTS stack 用法
  • 航空航天学院静变电源,机库直线加电电源装置供飞机通电启动
  • Java面试题九
  • C语言_动态内存管理
  • 2024年软件设计师中级(软考中级)详细笔记【10】网络与信息安全基础知识(分值5分)
  • 解决RabbitMQ脑裂问题
  • ARM/Linux嵌入式面经(四九):诺瓦星云
  • 特种设备作业G1工业锅炉司炉题库
  • 前端算法:树(力扣144、94、145、100、104题)
  • MYSQL-SQL-01-DDL(Data Definition Language,数据定义语言)
  • AIMO 2025 竞赛启动 | IMO 系列
  • GitHub 介绍及使用
  • 基于Springboot相亲网站系统的设计与实现
  • C++ 抛异常
  • 使用网络爬虫简单爬取页面信息
  • 10.23六级翻译
  • Kubernetes:(一)基本概念
  • 006 详解类型、变量与对象 上
  • 论当前的云计算
  • 树莓派4B快速部署Samba服务
  • 算法-二叉树的最大路径和
  • 力扣 简单 70.爬楼梯