基于html2canvas做缩略图功能

6 篇文章 0 订阅

1、需求背景

用户通过拖拽配置一个界面,当点击保存时,将当前界面保存成图片存起来,放到表格中展示。

2、实现

前端生成图片

html2canvas官网,通过html2canvas将dom转成canvas,使用canvas.toDataURL 这个api转成base64图片发给后端去存储

 /**
             * 获取要转换的dom
             */
            const dom = colRef.current.querySelector(`.${DropTargetPanelClassName}`);
            html2canvas(dom).then((canvas: any) => {
                const config = setAllDragData(dropConfig, dropData, clientRect);
                item.handle({
                    dropData: {
                        style: style,
                        dropConfig: config
                    },
                    image: canvas.toDataURL('image/jpeg', 0.3), // 缩小质量
                });
            });

后端存储

/**
 * 将base64 转换成图片
 * @param image
 * @returns {Promise}
 */
async createImageByBase64(image) {
    return new Promise((resolve, reject) => {
        if (image && image.startsWith('data:image')) {
            // 相对图片路径
            const fileFath = path.join('/upload', '/img');
            // 文件名称
            const fileName = `/${Date.now()}-thumbnail.png`;
            // 绝对图片路径
            const imgPath = path.join(this.ctx.app.baseDir, fileFath);
            // 写入路径
            const filePath = path.join(imgPath, fileName);
            /**
             * 去掉前缀
             */
            const base64 = image.replace(/^data:image\/\w+;base64,/, '');
            //把base64码转成buffer对象,
            const dataBuffer = new Buffer(base64, 'base64');
            if (!fs.existsSync(imgPath)) fs.mkdirSync(imgPath);
            fs.writeFile(filePath, dataBuffer, function (err) {
                resolve({
                    code: 0,
                    message: '上传成功',
                    data: path.join(fileFath, fileName)
                });
            });
        } else {
            resolve({
                code: 1,
                message: '上传失败',
                data: image
            });
        }
    })
}

3、展示界面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值