JavaScript图片url地址转base64简单示例

vanora1111 2024-04-21 10:51:58编程技术
367

前言

记录来自于每一次的实际需求;

此次需要做的是将拿到的图片,转png格式下载,看了下数据库返回的地址,有png、svg、jpg格式,我的想法是先通通转base64,再处理成png下载。

JavaScript.jpg

一、图片地址转base64

1、先定义一个方法 

/**
 * 根据图片的url转换对应的base64值
 * @param { String } imageUrl 如:http://xxxx/xxx.png
 * @returns base64取值
 */
async urlToBase64(imageUrl) {
    return new Promise((resolve, reject) => {
      let canvas = document.createElement('canvas')
      const ctx = canvas.getContext('2d')
      let img = new Image()
      img.crossOrigin = 'Anonymous' // 解决Canvas.toDataURL 图片跨域问题
      img.src = imageUrl
      img.onload = function() {
        canvas.height = img.height
        canvas.width = img.width
        ctx.fillStyle = '#fff' // canvas背景填充颜色默认为黑色
        ctx.fillRect(0,0,img.width,img.height)
        ctx.drawImage(img, 0, 0) // 参数可自定义
        const dataURL = canvas.toDataURL('image/jpeg', 1) // 获取Base64编码
        resolve(dataURL)
        canvas = null // 清除canvas元素
        img = null // 清除img元素
      }
      img.onerror = function() {
        reject(new Error('Could not load image at ' + imageUrl))
      }
    })
}

2、存储返回的base64,并转为png格式下载

/**
* 下载图片的方法
 * @param { String } imageUrl 如:http://xxxx/xxx.png
 * @returns base64取值
 */
async upload(item) {
 // 此处的src 是图片地址,如: http://xxxx/xxx.png 
  let { src, name } = item
  // 存储base64的值
  let base64 = await this.urlToBase64(src)
  let link = document.createElement('a')
  link.href = base64
  link.download = `${name}.png`
  link.click()
}

补充知识:

1)将base64图片格式转为可读的url格式

将图片文件转为二进制,然后通过URL的createObjectURL函数,将二进制转为url格式

   function getBase64URL(pic) {
        const blob = base64ImgtoFile(pic)
        const blobUrl = window.URL.createObjectURL(blob);
        return blobUrl
    }

2)将图片转为文件

function base64ImgtoFile (dataurl, filename = 'file') {
        //将base64格式分割:['data:image/png;base64','XXXX']
        const arr = dataurl.split(',')
        // .*? 表示匹配任意字符到下一个符合条件的字符 刚好匹配到:
        // image/png
        const mime = arr[0].match(/:(.*?);/)[1]  //image/png
        //[image,png] 获取图片类型后缀
        const suffix = mime.split('/')[1] //png
        const bstr = atob(arr[1])   //atob() 方法用于解码使用 base-64 编码的字符串
        let n = bstr.length
        const u8arr = new Uint8Array(n)
        while (n--) {
            u8arr[n] = bstr.charCodeAt(n)
        }
        return new File([u8arr], `${filename}.${suffix}`, {
            type: mime
        })
    }

总结 

到此这篇关于JavaScript图片url地址转base64的文章就介绍到这了,更多相关JS图片url地址转base64内容请搜索站长工具网以前的文章或继续浏览下面的相关文章希望大家以后多多支持站长工具网!

base64 JavaScript
THE END
战地网
频繁记录吧,生活的本意是开心

相关推荐

JavaScript 中 instanceof 的作用及使用方法详解
在 JavaScript 的类型检查体系中,instanceof 是一个重要的操作符,用于判断一个对象是否属于某个构造函数的实例或其原型链上的类型。本文ZHANID工具网将系统讲解 instanceof...
2025-09-11 编程技术
860

JavaScript出现“undefined is not a function”错误的解决方法
在JavaScript开发中,TypeError: undefined is not a function 是最常见的运行时错误之一,通常表示代码尝试调用一个未定义(undefined)的值作为函数。本文ZHANID工具网将从...
2025-09-10 编程技术
741

JavaScript报错“Uncaught ReferenceError”如何解决?
在JavaScript开发中,“Uncaught ReferenceError”是常见且易混淆的错误类型。本文ZHANID工具网从错误本质、常见场景、排查步骤、解决方案四个维度,结合真实代码案例与调试技...
2025-09-09 编程技术
784

JavaScript面试题汇总:高频考点与答案解析
在前端开发领域,JavaScript作为核心语言,其面试题覆盖了从基础语法到高级特性的广泛范围。本文ZHANID工具网将系统梳理JavaScript高频面试考点,结合权威资料与典型案例,为...
2025-09-08 编程技术
712

JavaScript中严格模式(use strict)的作用与使用场景
JavaScript的灵活性既是其优势,也是开发者面临的挑战。非严格模式下,隐式全局变量、模糊的this绑定等特性容易导致难以调试的错误。为解决这些问题,ECMAScript 5(ES5)引入...
2025-09-04 编程技术
675

使用JavaScript开发一个简易计算器(附示例代码)
在Web开发领域,JavaScript因其灵活性和强大的交互能力成为实现动态功能的核心技术。本文ZHANID工具网将通过构建一个简易计算器,系统讲解如何利用HTML、CSS和JavaScript完成...
2025-09-03 编程技术
681