技术标签: JavaScript
公众号:程序员波波
在平时开发的时候,我们在处理文件,尤其是图片的时候,经常会跟base64、url、blob(file)这三种形式的内容打交道。
base64格式一般都是以data:image/jpeg;base64,这种类似形式打头的一串很长的字符串。
url一般以服务器地址或者路径(形如http://xxx.jpg或者/static/xxx.jpg)为主,也会有浏览器本地地址(形如blob:http://这种)。
blob一般是浏览器中的一种对象类型,file类型也是其一种。
base64到blob:
比如png格式的base64图片转成blob类型:
function pngBase64ToBlob(urlData) {
try {
var arr = urlData.split(',')
var mime = arr[0].match(/:(.*?);/)[1] || 'image/png';
// 去掉url的头,并转化为byte
var bytes = window.atob(arr[1]);
// 处理异常,将ascii码小于0的转换为大于0
var ab = new ArrayBuffer(bytes.length);
// 生成视图(直接针对内存):8位无符号整数,长度1个字节
var ia = new Uint8Array(ab);
for (var i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i);
}
return new Blob([ab], {
type: mime
});
}
catch (e) {
var ab = new ArrayBuffer(0);
return new Blob([ab], {
type: 'image/png',
});
}
}
其他格式的图片类似,于是可以写一个通用的图片接口:
function imageBase64ToBlob(urlData, type='image/jpeg') {
try {
var arr = urlData.split(',')
var mime = arr[0].match(/:(.*?);/)[1] || type;
// 去掉url的头,并转化为byte
var bytes = window.atob(arr[1]);
// 处理异常,将ascii码小于0的转换为大于0
var ab = new ArrayBuffer(bytes.length);
// 生成视图(直接针对内存):8位无符号整数,长度1个字节
var ia = new Uint8Array(ab);
for (var i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i);
}
return new Blob([ab], {
type: mime
});
}
catch (e) {
var ab = new ArrayBuffer(0);
return new Blob([ab], {
type: type,
});
}
}
blob转本地url:
function blobToUrl(blob_data) {
return URL.createObjectURL(blob_data)
}
blob转base64:
function blobToBase64(blob_data, callback) {
let reader = new FileReader()
reader.onload = (e) => {
if (callback) {
callback(e.target.result)
}
}
reader.readAsDataURL(blob_data)
}
url转blob:
function urlToBlob(the_url, callback) {
let xhr = new XMLHttpRequest();
xhr.open("get", the_url, true);
xhr.responseType = "blob";
xhr.onload = function() {
if (this.status == 200) {
if (callback) {
callback(this.response);
}
}
};
xhr.send();
}
有了以上接口就可以三种格式互相转换了,不过url转blob和blob转base64是异步的操作,此外url还分服务器端url和浏览器本地url,需要自己使用时区分清楚。
import java.util.Arrays;import java.util.HashMap;public class Main { public static void main(String[] args){ int[] num={1,2,3,6,8,11}; int[] c=find(num,9); System.out...
在开发Android应用程序时,如果需要使用系统提供的服务,可以通过服务名称调用山下文的getSystemService(String name)来获取服务管理者,那么该函数是如何实现服务查询的呢?frameworks\base\core\java\android\app\ContextImpl.javapublic Object getSystemService(String nam
目录1、存储引擎总结对比2、存储引擎明细对比2.1、MyISAM2.2、MEMORY2.3、InnoDB(默认)3、存储引擎选择问题:MySQL有哪些存储引擎?默认是哪个?有什么区别?如何选择存引擎?1、存储引擎总结对比在mysql5之后,支持的存储引擎有9种,但是常用的就那么几种,而且默认支持的是InnoDB。我们可以使用命令来看看当前数据库可以支持的存储引擎有哪些。show engines;也可以查询当前表使用什么存储引擎: SHOW TABL.
第一部分: new和delete的实现原理开始谈之前我们应该了解另一个概念“operator new”和“operator delete”:new操作符调用一个函数来完毕必需的内存分配,你可以重写或重载这个函数来改变它的行为。new操作符为分配内存所调用函数的名字是operator new()。函数operator new 通常这样声明:void * operator new(...
论文导读::嵌入式系统是以应用为中心、以计算机为基础、软硬件可裁剪。即启动过程可分为阶段1和阶段2两个部分。技术概述。论文关键词:嵌入式系统,启动过程,BootLoader技术 一 BootLoader技术概述 嵌入式系统是以应用为中心、以计算机为基础、软硬件可裁剪,适用于系统对功能、可靠性、成本、功耗严格要求的专用计算机系统。计算机系统都具有相应的引导程序,对于嵌入式系统在执
原标题:【工具】有了这个神器,轻松用 Python 写个 App作者:Adrien Treuille机器之心编译 编辑:可可机器学习开发者想要打造一款 App 有多难?事实上,你只需要会 Python 代码就可以了,剩下的工作都可以交给一个工具。近日,Streamlit 联合创始人 Adrien Treuille 撰文介绍其开发的机器学习工具开发框架——Streamlit,这是一款专为机器学习工程...
一、路由原理数据包从A到达B有很多路径可以选择,但是既然是多条路径,必定会有一条路径是最优的选择。因此,为了尽可能的提高网速,就需要一种方法来判断从源主机到目的主机所经过的最优路径,从而进行数据转发,这就是路由技术。1、路由器的工作原理不同网段的主机相连,这时数据的传输就需要路由器来发挥作用了。源主机发送数据包给目标主机,但两台主机又不在同一网段,所以源主机会把数据包发送给本网段的网关路由器,网...
[java] view plain copy&lt;span style="font-family:Arial, Helvetica, sans-serif;background-color:rgb(255,255,255);"&gt;&lt;/span&gt; 验证码效果如下:有静态的,动态的,中空的结合网上的图形验证码技术,不依赖第三方包纯java加工了一个比较复杂的图形验证码方案,防OCR...
最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备在上周,我密集面试了若干位Java后端的候选人,工作经验在3到5年间。我的标准其实不复杂:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架,我相信其它公司招初级开发时,应该也照着这个标准来面的。我也知道,不少候选人能力其实不差,但面试时没准备或不会说,这样的人可能在进团队干活后确实能达到期望,但可能就无法通过面试,但面试官总是只根据面试情况来判断。但现实情况是,大多数人可能面试前没准备,或.
概述概念面向对象 = 对象 + 类 + 继承 + 消息对象对象(Object):具有责任的实体。用来描述客观事物的实体,是构成系统的一个基本单位,由一组属性以及作用在这组属性的操作构成。特性:标识符(区别其他对象)、属性(状态)和操作(行为)。属性(Attribute):与对象关联的数据,描述对象静态特性;操作(Operation):与对象关联的程序,描述对象动态特性;类(Class):概念具有相同
我们先看一个例子,假设去银行取钱,原始钱为20,每次只取1元,有3个人分别同时去取package com.Thread;/** * @author 林高禄 * @create 2020-05-14-15:43 */public class Test1 implements Runnable { private int a = 20; private boolean b = true; @Override public void run() { .
Python绘图在图中增加标记