需求:从接口中获取 svg 的 url,将获取到的内容转换为 Base64 的图片。
function getBase64Image(img,width,height) {
var canvas = document.createElement("canvas");
canvas.width = width ? width : img.width;
canvas.height = height ? height : img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
var dataURL = canvas.toDataURL();
self.svgData = dataURL;
return dataURL;
new 一个 Image ,在 onload 方法中调用 getBase64Image 方法。使用 svgData 来将 dataURL 存起来。
getBase64(img){
let self = this;
......
var image = new Image();
image.crossOrigin = '';
image.src = img;
var deferred=$.Deferred();
if(img){
image.onload =function (){
deferred.resolve(getBase64Image(image));
return deferred.promise();
需求:从接口中获取 svg 的 url,将获取到的内容转换为 Base64 的图片。 function getBase64Image(img,width,height) { var canvas = document.createElement("canvas"); canvas.width = width ? width : img.width; canvas.h...
methods: {
onOK() {
//调用转换方法 svgBase64为svgbase64的数据 格式:data:image/svg+xml;base64,..................
let pngBase64Fun = this.svgBase64ToPngBase64(svgBase64);
pngBase64Fun.then((res) => {
// 将svg base64转 pngbase64后执行回调函数,res 为转换后的png
需要将端上传过来的svg文件解析为字符串,然后再生成jpeg格式图片,再将图片转成Base64格式进行使用首先引入如下以来。版本一定按照这个来,高版本会出现各种类丢失的问题。
再就是工具类代码
可以看到生成了base64字符串
进行转化后能够复原出图片
转换链接:https://www.sojson.com/image2base64.html
2、使用两者区别
(1)使用一个63.8k的svg与使用转base64之后的两个文件
a、使用svg
b、使用base64
(2)使用一个225k的svg与使用转base64之后的两个文件
a、使用svg
b、使用base64
3、svg转base64有什么好处吗?
(1)减少http
今天遇到一个项目中使用纯色图标的问题,用字体麻烦用图片low,所以就想直接用svg,毕竟只有一两个图标。
第一想法是用 DataURI,然后想到了之前 CSS-tricks 的文章,翻了下做下汇总:
不建议把 svg 转 base64 来用
base64 本身浏览器解码也会消耗一定的资源
svg 转 base64 后反而会变大
解决方案:
压缩 svg 文件,使用 SVGO 或者 SV...
// 找到页面上面的svg元素
const svg = document.getElementById('svg');
// 将整个 document 对象序列化为一个 XML 字符串
const s = new XMLSerializer().serializeToString(svg);
// 通过window.btoa() 方法用于创建一个 base-64 编码的字符串
```javascript
// 假设svgBase64是SVG的Base64数据
let svgBase64 = "data:image/svg+xml;base64,..................";
// 创建一个Image对象
const img = new Image();
// 设置Image对象的src为SVG的Base64数据
img.src = svgBase64;
// 创建一个canvas元素
const canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
// 获取canvas的2D上下文
const context = canvas.getContext('2d');
// 在canvas上绘制SVG图像
context.drawImage(img, 0, 0);
// 将canvas转换为SVG格式的Base64
let svgBase64Result = canvas.toDataURL('image/svg+xml');
这段代码将SVG的Base64数据转换为SVG格式的Base64数据。请注意,这里使用的是canvas的toDataURL方法,并将参数设置为'image/svg+xml',以确保输出的是SVG格式的Base64数据。
希望这可以帮助到你!
#### 引用[.reference_title]
- *1* *2* [js实现svg base64转png base64 (base64文件上传)](https://blog.csdn.net/m0_58719994/article/details/127078232)[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^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
解决 Vue 重复点击相同路由,出现 Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation 问题
47723