前端项目引入html2canvas,vue-html2canvas实现缩略图

本文详细介绍了在Vue.js项目中如何利用html2canvas库生成网页元素的缩略图,并通过两种方式(Blob文件和Base64数据)提交到后端。首先,引入html2canvas并设置相关参数,然后转换生成的图片为Blob或Base64,最后通过 Axios 发送POST请求将图片数据提交给后端API。
摘要由CSDN通过智能技术生成

54142e9e2cec5f931da97ded9dd33f42.png

准备工作:

npm install --save html2canvas

在需要的组件中引入

import html2canvas from "html2canvas"

需要生成的图片所在的div 要添加

....

方法一:生成blob文件 提交给后端 前端显示的时候显示图片的路径

前端methods里添加

html2canvas(this.$refs.imageWrapper,{

scale:0.25,  // 按比例放大或缩小

// dpi: 900, // 处理模糊问题

// foreignObjectRendering: true,// 是否尝试使用CORS从服务器加载图像

useCORS: true,// 是否尝试使用CORS从服务器加载图像

// async: false, // 是否异步解析和呈现元素

background: "#ffffff", // 一定要添加背景颜色,否则出来的图片,背景全部都是透明的,

}).then(canvas => {

const dataUrl = canvas.toDataURL(‘images/jpg‘)

var fd = new FormData()

var blob = this.dataURItoBlob(dataUrl)

fd.append(‘file‘, blob, Date.now() + ‘.png‘)

addView1(fd).then(res => { //这里要注意

if (res.data.code === 200) {

this.$message.success("保存成功!")

} else {

this.$message.error(res.data.message)

}

})

}),dataURLtoBlob(dataurl) {

// base64转blob

var arr = dataurl.split(‘,‘);

var mime = arr[0].match(/:(.*?);/)[1];

var bstr = atob(arr[1]);

var n = bstr.length;

var u8arr = new Uint8Array(n);

while (n--) {

u8arr[n] = bstr.charCodeAt(n);

}

return new Blob([u8arr], { type: mime });

}

service里写

export async function addView1(viewImg) {

return request(VIEW_ADD1,METHOD.POST,viewImg,{type:‘multipart/form-data‘}) //注意这里提交的是图片文件

}

request.js里

async function request(url, method, params, config) {

switch (method) {

case METHOD.GET: {

return axios.get(url, {params, ...config})

}

case METHOD.POST: {

if (config != undefined && config.type != undefined && config.type === ‘form-data‘) {

const formData = new FormData();

Object.keys(params).forEach((key) => {

formData.append(key, params[key]);

});

return axios.post(url, formData, config)

}

return axios.post(url, params, config)

}

default:

return axios.get(url, {params, ...config})

}

}

后端代码

@PostMapping("add1")

public NtasResponse test(@RequestParam("file") MultipartFile file) {

System.out.println(file);

String fileName = file.getOriginalFilename();

if(fileName.indexOf("") != -1){

fileName = fileName.substring(fileName.lastIndexOf(""));

}

String filePath = "src/main/resources/static/files/";

File targetFile = new File(filePath);

if(!targetFile.exists()){

targetFile.mkdirs();

}

FileOutputStream out = null;

try {

out = new FileOutputStream(filePath+fileName);

out.write(file.getBytes());

out.flush();

out.close();

} catch (Exception e) {

e.printStackTrace();

}

return new NtasResponse().success();

}

方法二:生成base64数据 提交给后端数据库中 使用时 直接base64data

前端methods里添加

html2canvas(this.$refs.imageWrapper,{

scale:0.25,  // 按比例放大或缩小

// dpi: 900, // 处理模糊问题

// foreignObjectRendering: true,// 是否尝试使用CORS从服务器加载图像

useCORS: true,// 是否尝试使用CORS从服务器加载图像

// async: false, // 是否异步解析和呈现元素

background: "#ffffff", // 一定要添加背景颜色,否则出来的图片,背景全部都是透明的, null为透明

}).then(canvas => {

const dataUrl = canvas.toDataURL(‘images/jpg‘)

var img = {

file:dataUrl

}

addView1(img).then(res => { //这里要注意提交时异步的 如果要向后端传值 则在then中发送请求

if (res.data.code === 200) {

this.$message.success("保存成功!")

} else {

this.$message.error(res.data.message)

}

})

})

service里写

export async function addView1(viewImg) {

return request(VIEW_ADD1,METHOD.POST,viewImg,{type:‘form-data‘})

}

request.js里

async function request(url, method, params, config) {

switch (method) {

case METHOD.GET: {

return axios.get(url, {params, ...config})

}

case METHOD.POST: {

if (config != undefined && config.type != undefined && config.type === ‘form-data‘) {

const formData = new FormData();

Object.keys(params).forEach((key) => {

formData.append(key, params[key]);

});

return axios.post(url, formData, config)

}

return axios.post(url, params, config)

}

default:

return axios.get(url, {params, ...config})

}

}

后端代码

@PostMapping("add1")

public Response test(String file) {

System.out.println(file);

return new Response().success();

}

vue-html2canvas实现缩略图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js是一个用于构建用户界面的JavaScript框架,而html2canvas是一个JavaScript库,可以将HTML元素渲染成图片。Vue.js和html2canvas可以一起使用来实现在浏览器中截图的功能。 要在Vue.js中使用html2canvas进行截图,首先需要安装并引入html2canvas库。然后,可以在Vue组件中使用html2canvas的API来进行截图操作。具体步骤如下: 1. 在Vue项目中安装html2canvas库,可以使用npm或者yarn进行安装。 2. 在需要截图的组件中,引入html2canvas库。可以通过在组件的script标签中使用import语句来引入html2canvas库。 3. 在组件的方法中,使用html2canvas的API来截取指定元素的内容并生成图片。可以使用html2canvas函数来获取DOM元素,并使用toDataURL方法将其转换为base64编码的图片数据。 4. 将生成的图片数据用于展示或上传等操作。 需要注意的是,由于html2canvas是基于canvas元素和浏览器渲染引擎的,所以在进行截图时,可能会受到一些限制和兼容性问题。可以根据具体需求进行相关的调试和优化。 参考资料: 引用内容里提到了Vue.js和html2canvas的用法和功能。<span class="em">1</span> #### 引用[.reference_title] - *1* [浏览器显示数据库中数据的条形图柱状图 前后端分离vue.js+spring boot 计算机软件工程课程设计毕业设计 ...](https://download.csdn.net/download/Amzmks/88275824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值