媒体文件audio 转 base64 编码 (利用 FileReader & Audio 对象)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script type="text/javascript">
(function(){
//颜色动画插件 收录 前端网 halcheung 大侠的笔记。网址 http://www.w3cfuns.com/notes/17953/6ceda0bfa4a98d2d1a8c03fb638bae4e.html
// store the jq animate function temporarily
var _anim = $.fn.animate;
// override jq animate function
$.fn.extend({
animate: function (styles, speed, easing, callback) {
if (typeof styles == "object") {
var colorStyles = null,
that = this;
for (var style in styles) {
// init colorStyle object
if (!colorStyles && /color/gi.exec(style)) colorStyles = {};
// get the color styles
if (style == "color") {
colorStyles.color = styles[style];
} else if (style == "background-color" || style == "backgroundColor") {
colorStyles.backgroundColor = styles[style];
} else if (style == "border-color" || style == "borderColor") {
colorStyles.borderColor = styles[style];
} else if (style == "border-top-color" || style == "borderTopColor") {
colorStyles.borderTopColor = styles[style];
} else if (style == "border-right-color" || style == "borderRightColor") {
colorStyles.borderRightColor = styles[style];
} else if (style == "border-bottom-color" || style == "borderBottomColor") {
colorStyles.borderBottomColor = styles[style];
} else if (style == "border-left-color" || style == "borderLeftColor") {
colorStyles.borderLeftColor = styles[style];
}
delete styles[style];
}
// if check color styles positive
if (colorStyles) {
// color animation class
function animColor() {
// color animation function
this.anim = function (colorStyle, targetStyleColor) {
targetStyleColor = formatColor(targetStyleColor);
var currentColor = formatColor($(that).get(0).style[colorStyle]),
step = calcStep(currentColor, targetStyleColor);
changeColor(colorStyle, currentColor, targetStyleColor, step);
};
// color value step of animation
function calcStep(startColor, endColor) {
var maxDiff = -1, animStep = 1;
for (var i = 0; i < 3; i++) {
if (Math.abs(endColor[i] - startColor[i]) > maxDiff) {
maxDiff = Math.abs(endColor[i] - startColor[i]);
}
}
animStep = Math.floor(maxDiff / (speed / 20));
//console.log(maxDiff + "," + speed);
animStep = !animStep ? 1 : animStep;
return animStep;
}
// set the middle frame color of element
function changeColor(colorStyle, middleStyle, toStyle, step) {
middleStyle = changeColorStep(middleStyle, toStyle, step);
$(that).get(0).style[colorStyle] = "rgb(" + middleStyle[0] + "," + middleStyle[1] + "," + middleStyle[2] + ")";
if (middleStyle[0] == toStyle[0] && middleStyle[1] == toStyle[1] && middleStyle[2] == toStyle[2]) {
$(that).get(0).style[colorStyle] = hexColor(middleStyle);
return;
}
setTimeout(function () {
changeColor(colorStyle, middleStyle, toStyle, step);
}, 20);
}
// calculate step color
function changeColorStep(curClr, tgtClr, step) {
for (var i = 0; i < 3; i++) {
if (curClr[i] < tgtClr[i]) {
curClr[i] += step;
if (curClr[i] > tgtClr[i]) curClr[i] = tgtClr[i];
} else if (curClr[i] > tgtClr[i]) {
curClr[i] -= step;
if (curClr[i] < tgtClr[i]) curClr[i] = tgtClr[i];
}
}
return curClr;
}
// convert hex color to rgb color
function formatColor(styleColor) {
if (!styleColor) {
return [0, 0, 0];
} else {
var r = g = b = 0;
if (/^#[a-f0-9]{3}$/gi.exec(styleColor)) {
r = parseInt(styleColor.substr(1, 1) + styleColor.substr(1, 1), 16);
g = parseInt(styleColor.substr(2, 1) + styleColor.substr(2, 1), 16);
b = parseInt(styleColor.substr(3, 1) + styleColor.substr(3, 1), 16);
} else if (/^#[a-f0-9]{6}$/gi.exec(styleColor)) {
r = parseInt(styleColor.substr(1, 2), 16);
g = parseInt(styleColor.substr(3, 2), 16);
b = parseInt(styleColor.substr(5, 2), 16);
} else if (styleColor.toLowerCase().indexOf("rgb") != -1) { // rgb
styleColor = styleColor.toLowerCase().split(/\(|\)/gi)[1].split(',');
r = styleColor[0].trim() * 1;
g = styleColor[1].trim() * 1;
b = styleColor[2].trim() * 1;
}
return [r, g, b];
}
}
// convert rgb color to hex color
function hexColor(rgb) {
var r = ("0" + rgb[0].toString(16)).substr(-2),
g = ("0" + rgb[1].toString(16)).substr(-2),
b = ("0" + rgb[2].toString(16)).substr(-2);
return "#" + r + g + b;
}
} // play color animation
for (var styl in colorStyles) {
var anim = new animColor();
anim.anim(styl, colorStyles[styl]);
anim = null;
}
}
} // most important step: get the original function of jq animate
return _anim.apply(this, [styles, speed, easing, callback]);
}
});
})();
(function(){
$.fn.dragToDrop = function(fun){
var eventStr = "dragleave drop dragenter dragover";
$(document).on(eventStr,function(e){
e.preventDefault(); // 禁用 document 默认行为
});
$(this).on(eventStr,function(e){
e.preventDefault();
var files;
if(e.type == "drop") files = e.originalEvent.dataTransfer.files; //获取文件对象
fun(files);
})
return this;
} })();
(function(){ //列队播放音频文件
var music;
var i = 0;
var flag = false;
var playlist = [];
$.audio = function(data){
playlist.push(data);
//console.log(music)
if(!music || $.type(music) != "object"){
music = new Audio(data);
music.play();
}
$(music).on("play",function(){
flag = false;
});
$(music).on('ended',function(){
if(flag) return;
flag = true;
i++;
if(i >= playlist.length){
music = null;
return;
}
this.src = playlist[i];
this.play();
return;
});
}
})();
(function(){
$.readFileData = function(obj, fun){ //读取文件内容
var reader = new FileReader();//新建一个FileReader
reader.readAsDataURL(obj, "UTF-8");//以base64编码方式读取文件
reader.onload = function(e){
fun(e.target.result);
}
}
$.eachFiles = function(files){ // 遍历文件列表
var obj = $("#look ul").length > 0 ? $("#look ul") : $("<ul>").appendTo($("#look"))
var fileType = "mp3,ogg,wav,mid,midi,wma,asf";
$.each(files, function(i,n){
$.readFileData(n, function(data){
obj.append($("<li>").css({"text-overflow":"ellipsis","white-space":"nowrap"}).text(n.name + " - " + data));
if(fileType.indexOf(n.name.split(".")[1]) > -1) $.audio(data);
});
});
}
Number.prototype.toFormatString = function(n,d){
return (Array(d).join(0) + this.toString(n)).slice(-d);
}
window.rgb = function (a,b,c){
return "#" + a.toFormatString(16,2) + b.toFormatString(16,2) + c.toFormatString(16,2);
}
window.compileString = function(str){
return new Function("return " + str)();
}
window.RBGToHex = function(str){
return compileString(str);
}
window.HexToRGB = function(str){
if(str.length == 4) str = str.replace(/^#([A-Fa-f0-9]{1})([A-Fa-f0-9]{1})([A-Fa-f0-9]{1})/,"$1,$2,$3")
if(str.length == 7) str = str.replace(/^#([A-Fa-f0-9]{2})([A-Fa-f0-9]{2})([A-Fa-f0-9]{2})/,"$1,$2,$3")
var arr = str.split(",");
$.each(arr,function(i,n){
if(n.length == 1){
if(parseInt(n,16) > 0) n += n;
}
arr[i] = parseInt(n,16)
});
return "rgb(" + arr.join(",") + ")";
}
})();
$(function(){
$("#form input[name='fileTrans']").change(function(){
if (!(window.File || window.FileReader || window.FileList || window.Blob)) {
alert('你妈喊你换Chrome浏览器啦');
return;
}
var files = $(this).prop('files');//通过文件域获取到文件列表
if(!files || files.length == 0){
alert('请选择文件');
return;
}
$.eachFiles(files);
}).dragToDrop(function(files){ //通过拖拽获取文件列表
var flieStyle = $("#flieStyle");
if(files && files.length > 0){
$.eachFiles(files);
flieStyle.animate({"border-color":"#000"}, 10, "swing");
return;
}
var color = RBGToHex(flieStyle.css("border-color")) == RBGToHex(HexToRGB("#0ff")) ? "#000" : "#0ff";
//console.log(RBGToHex(HexToRGB(color)))
flieStyle.animate({"border-color":color}, 10, "swing")
});
});
</script>
</head>
<body>
<h1>媒体文件 转 base64 编码</h1>
<div style="font-size:12px;color:gray;margin-bottom:10px;">PS:选择一个或多个文件,如果是音频格式并且您的浏览器支持,便可能会听到 base64 编码后的声音。</div>
<form id="form" >
<div id="flieStyle" style="border:dashed 1px black;background-color:snow;width:150px;height:150px;position:relative;line-height:2rem;font-size:12px;margin:30px auto;">
<input type="file" name="fileTrans" multiple="multiple" style="width:150px;height:150px;position:absolute;opacity:0;background-color:black;">
<span style="text-align:center;width:100%;margin-top:2.5rem;display:block;"><input type="button" value="点击选择文件"><br>拖动文件到此框中</span>
</div>
</form>
<div id="look"></div>
</body>
</html>
媒体文件 转 base64 编码
媒体文件audio 转 base64 编码 (利用 FileReader & Audio 对象)的更多相关文章
- php 将图片文件转成base64编码的方法
php 将图片文件转成base64编码的方法<pre><?php /** 文件转base64输出 * @param String $file 文件路径 * @return Strin ...
- 图片文件转换成Base64编码实现ajax提交图片
//上传头像图片 function uploadHead(imgPath) { console.log("imgPath = " + imgPath); var image = n ...
- 使用base64编码把背景添加到CSS文件中
最近博客背景图片的外链挂了,没办法,只好另找办法. 在博客园后台,有一个“文件”菜单,可以上传自己的文件,我就打算把图片传到里面.但却发现了一个很反人性的设置:不允许上传jpg,png文件,允许上传的 ...
- base64编码处理大文件
在做项目的时候遇到需要将文件转为base64编码,并存储在文件中. 在将文件转为base64编码是会将文件读入内存,进行base64编码,输出到文件中.代码入下: FileInputStream st ...
- 减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)
在网站开发过程中,对于页面的加载效率一般都想尽办法求快.那么,怎么让才能更快呢?减少页面请求 是一个优化页面加载速度很好的方法.上一篇博文我们讲解了 “利用将小图标合成一张背景图来减少HTTP请求”, ...
- java 按字节读写二进制文件(Base64编码解码)
最近在做项目时遇到这样一个需求:依次读取本地文件夹里所有文件的内容,转为JSON,发送到ActiveMQ的消息队列, 然后从MQ的消息队列上获取文件的信息,依次写到本地.常见的文件类型,比如.txt ...
- Java对网络图片/本地图片转换成Base64编码和解码
一.将本地图片转换成Base64编码字符串 /** * 将本地图片转换成Base64编码字符串 * * @param imgFile 图片目录路径 * @return */ public static ...
- delphi将图片转换成Base64编码函数
{************************************************************************** 名称: BaseImage 参数: fn: TF ...
- Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net
Atitit. 二进制数据ascii表示法,与base64编码解码api 设计标准化总结java php c#.net 1. Base64编码, 1 1.1. 子模式 urlsafe Or url ...
随机推荐
- java注解方式解析xml格式
注解类和字段方式: @XStreamAlias("message") 别名注解 注解集合: @XStreamImplicit(itemFieldName="part&qu ...
- java Comparator和Comparable(比较器)
Comparable: 一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序,sort方法调用compareTo()方法里定义 ...
- 基于Prometheus的Pushgateway实战
一.Pushgateway 简介 Pushgateway 是 Prometheus 生态中一个重要工具,使用它的原因主要是: Prometheus 采用 pull 模式,可能由于不在一个子网或者防火墙 ...
- GetNumber的实现(Python & Java & Golang)
TCO2014的编程赢取门票的题目,大致是从一个数组(大小为K),可以选取1-K个数,必须保证这n个数是从1-n,返回所有的选取方法个数. 思路:首先是得到从1开始连续的数,保存每个数的个数.然后通过 ...
- IntelliJ IDEA快捷键:Ctrl+空格
The Code Completion feature lets you quickly complete different kinds of statements in the code.For ...
- ubuntu16耳机没声音解决
装完ubuntu16后又装了英伟达的显卡驱动,安装了网易云音乐后,突然发现电脑没声音,使用了如下方法解决 首先用在终端输入如下命令,下载pulseaudio音量控制软件 sudo apt instal ...
- Windows下 ffmpeg + labelImg 提取视频帧 得到图片集 并 标注图片 来 构造数据集
构造数据集的流程 视频文件 >> ffmpeg处理 >> 图片集 >> labelImg进行标注 >> 标注好的数据集 准备ffmpeg ...
- jQuery的类数组对象结构(转)
原文:http://www.imooc.com/code/3248 为什么是类数组对象呢? 很多人迷惑的jQuery为什么能像数组一样操作,通过对象get方法或者直接通过下标0索引就能转成DOM对象. ...
- 对怎样充分利用安卓官方开发网站的一个简单性介绍介绍-https://developer.android.google.cn/docs/
一,谷歌的安卓官方网站-https://developer.android.google.cn/docs/ ,在网站里面可以查询开发文档,开发指导,设计原则,制作app的例子等等,无论对于新手还是老手 ...
- Odoo访问权限(一)
Odoo访问权限(一) 四个ODOO权限管理层次 一. Odoo 菜单级别: 即,不属于指定菜单所包含组的用户看不到该菜单.不安全,只是隐藏菜单,若用户知道菜单ID,仍然可以通过指定URL访问 二. ...