zoukankan      html  css  js  c++  java
  • 媒体文件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;150px;height:150px;position:relative;line-height:2rem;font-size:12px;margin:30px auto;">
    		    	<input type="file" name="fileTrans" multiple="multiple" style="150px;height:150px;position:absolute;opacity:0;background-color:black;">
    		    	<span style="text-align:center;100%;margin-top:2.5rem;display:block;"><input type="button" value="点击选择文件"><br>拖动文件到此框中</span>
    			</div>
    		</form>
    		<div id="look"></div>
    	</body>
    </html>
    

    媒体文件 转 base64 编码

    PS:选择一个或多个文件,如果是音频格式并且您的浏览器支持,便可能会听到 base64 编码后的声音。

    拖动文件到此框中
     
  • 相关阅读:
    项目--Asp.net全局变量的设置和读(web.config 和 Gloab)
    项目--后台代码提示
    项目--给项目添加提示声音
    项目--正则表达式
    项目--HTML Canvas 和 jQuery遍历
    项目--用户自定义控件
    Bzoj2120/洛谷P1903 数颜色(莫队)
    Poj2482 Stars in Your Window(扫描线)
    Poj2182 Lost Cows(玄学算法)
    Poj3468 A Simple Problem with Integers (分块)
  • 原文地址:https://www.cnblogs.com/interdrp/p/7902507.html
Copyright © 2011-2022 走看看