导航:首页 > 文件处理 > html5base64压缩

html5base64压缩

发布时间:2023-01-30 19:11:30

⑴ 如何使用HTML5实现利用摄像头拍照上传功能

HTML5技术支持WebApp在手机上拍照,显示在页面上并上传到服务器。这是手机微博应用中常见的功能,当然你也可以在其它类型应用中适当使用此技术。
1、 视频流
HTML5 的 The Media Capture(媒体捕捉) API 提供了对摄像头的可编程访问,用户可以直接用 getUserMedia(请注意目前仅Chrome和Opera支持)获得摄像头提供的视频流。我们需要做的是添加一个HTML5 的 Video 标签,并将从摄像头获得的视频作为这个标签的输入来源。
<video id=”video” autoplay=”"></video>
<script>
var video_element=document.getElementById(‘video’);
if(navigator.getUserMedia){ // opera应使用opera.getUserMedianow
navigator.getUserMedia(‘video’,success,error); //success是回调函数,当然你也可以直接在此写一个匿名函数
}
function success(stream){
video_element.src=stream;
}
</script>
此时,video 标签内将显示动态的摄像视频流。下面需要进行拍照了。
2、 拍照
拍照是采用HTML5的Canvas功能,实时捕获Video标签的内容,因为Video元素可以作为Canvas图像的输入,所以这一点很好实现。主要代码如下:

var canvas=document.createElement(‘canvas’); //动态创建画布对象
var ctx=canvas.getContext(’2d’);
var cw=vw,ch=vh;
ctx.fillStyle=”#ffffff”;
ctx.fillRect(0,0,cw,ch);
ctx.drawImage(video_element,0,0,cw,ch,0,0,vw,vh); //将video对象内指定的区域捕捉绘制到画布上指定的区域,可进行不等大不等位的绘制。
document.body.append(canvas);

3、 图片获取
从Canvas获取图片数据的核心思路是用canvas的toDataURL将Canvas的数据转换为base64位编码的PNG图像,类似于“data:image/png;base64,xxxxx”的格式。
var imgData=canvas.toDataURL(“image/png”);

这样,imgData变量就存储了一长串的字符数据内容,表示的就是一个PNG图像的base64编码。因为真正的图像数据是base64编码逗号之后的部分,所以要让实际服务器接收的图像数据应该是这部分,我们可以用两种办法来获取。
第一种:是在前端截取22位以后的字符串作为图像数据,例如:
var data=imgData.substr(22);

如果要在上传前获取图片的大小,可以使用:
var length=atob(data).length; //atob 可解码用base-64解码的字串

第二种:是在后端获取传输的数据后用后台语言截取22位以后的字符串(也就是在前台略过上面这步直接上传)。例如php里:
$image=base64_decode(str_replace(‘data:image/jpeg;base64,’,”,$data);

4、 图片上传
在前端可以使用Ajax将上面获得的图片数据上传到后台脚本。例如使用jQuery时可以用:
$.post(‘upload.php’,{‘data’:data});

在后台我们用PHP脚本接收数据并存储为图片。
function convert_data($data){
$image=base64_decode(str_replace(‘data:image/jpeg;base64,’,”,$data);
save_to_file($image);
}
function save_to_file($image){
$fp=fopen($filename,’w');
fwrite($fp,$image);
fclose($fp);
}

以上的解决方案不仅能用于Web App拍照上传,也可以通过Canvas的编辑功能函数提供图片编辑,例如裁剪、上色、涂鸦、圈点等功能,然后把用户编辑完的图片上传保存到服务器上。
在还在不断补充修正的HTML5的驱动下,Web App与Native App之间的距离将越来越小。在可预见的不远的未来,越来越多老的和新的开发项目必将会迁移到WEB应用上来。
相关规范:
(为便于阅读,对原文进行了不失原意的适当修改,包括代码中一些错误的重复,并作了注释)
HTML5技术支持WebApp在手机上拍照,显示在页面上并上传到服务器。这是手机微博应用中常见的功能,当然你也可以在其它类型应用中适当使用此技术。
1、 视频流
HTML5 的 The Media Capture(媒体捕捉) API 提供了对摄像头的可编程访问,用户可以直接用 getUserMedia(请注意目前仅Chrome和Opera支持)获得摄像头提供的视频流。我们需要做的是添加一个HTML5 的 Video 标签,并将从摄像头获得的视频作为这个标签的输入来源。
<video id=”video” autoplay=”"></video>
<script>
var video_element=document.getElementById(‘video’);
if(navigator.getUserMedia){ // opera应使用opera.getUserMedianow
navigator.getUserMedia(‘video’,success,error); //success是回调函数,当然你也可以直接在此写一个匿名函数
}
function success(stream){
video_element.src=stream;
}
</script>
此时,video 标签内将显示动态的摄像视频流。下面需要进行拍照了。
2、 拍照
拍照是采用HTML5的Canvas功能,实时捕获Video标签的内容,因为Video元素可以作为Canvas图像的输入,所以这一点很好实现。主要代码如下:

var canvas=document.createElement(‘canvas’); //动态创建画布对象
var ctx=canvas.getContext(’2d’);
var cw=vw,ch=vh;
ctx.fillStyle=”#ffffff”;
ctx.fillRect(0,0,cw,ch);
ctx.drawImage(video_element,0,0,cw,ch,0,0,vw,vh); //将video对象内指定的区域捕捉绘制到画布上指定的区域,可进行不等大不等位的绘制。
document.body.append(canvas);

3、 图片获取
从Canvas获取图片数据的核心思路是用canvas的toDataURL将Canvas的数据转换为base64位编码的PNG图像,类似于“data:image/png;base64,xxxxx”的格式。
var imgData=canvas.toDataURL(“image/png”);

这样,imgData变量就存储了一长串的字符数据内容,表示的就是一个PNG图像的base64编码。因为真正的图像数据是base64编码逗号之后的部分,所以要让实际服务器接收的图像数据应该是这部分,我们可以用两种办法来获取。
第一种:是在前端截取22位以后的字符串作为图像数据,例如:
var data=imgData.substr(22);

如果要在上传前获取图片的大小,可以使用:
var length=atob(data).length; //atob 可解码用base-64解码的字串

第二种:是在后端获取传输的数据后用后台语言截取22位以后的字符串(也就是在前台略过上面这步直接上传)。例如PHP里:
$image=base64_decode(str_replace(‘data:image/jpeg;base64,’,”,$data);

4、 图片上传
在前端可以使用Ajax将上面获得的图片数据上传到后台脚本。例如使用jQuery时可以用:
$.post(‘upload.php’,{‘data’:data});

在后台我们用PHP脚本接收数据并存储为图片。
function convert_data($data){
$image=base64_decode(str_replace(‘data:image/jpeg;base64,’,”,$data);
save_to_file($image);
}
function save_to_file($image){
$fp=fopen($filename,’w');
fwrite($fp,$image);
fclose($fp);
}

以上的解决方案不仅能用于Web App拍照上传,也可以通过Canvas的编辑功能函数提供图片编辑,例如裁剪、上色、涂鸦、圈点等功能,然后把用户编辑完的图片上传保存到服务器上。
在还在不断补充修正的HTML5的驱动下,Web App与Native App之间的距离将越来越小。在可预见的不远的未来,越来越多老的和新的开发项目必将会迁移到WEB应用上来。

⑵ 如何通过html5调用摄像头拍照

ios拍照默认是旋转的,有个exif的插件是专门解决这个问题的。js版连接:网页链接,里面有使用教程。通过这个判断照片的旋转角度之后,可以把它旋转过来再保存,教程:网页链接。如果只有预览需求,直接旋转容器进行显示也是可以的。

⑶ html5怎么压缩图片

利用canvas的drawImage方法来绘制图片,并且设置绘制的图片的width跟height,最后再通过canvas的toDataURL方法来生成压缩后的dataUR

下面直接上代码:

html:

[html]view plain

⑷ html5写的页面安卓机上能播放视频,ios上不能播放,谁知道怎么解决

找修理铺专业人员进行转码

h264编码的压缩级别是不能够在ios上播放的,需要转码。这个需要专业的知识才可以进行转码,因此建议到修理铺找专业人士进行转码,如果自己操作数据易丢失。

另外html5是通过某种特定的压缩技术,将某个视频格式的文件转换为另一种视频格式的文件的技术称为视频编码,如果级别不适配的话可以进行转码使用。

(4)html5base64压缩扩展阅读:

数据在传输的过程中,浏览器会对数据进行编码,假如现在有一条数据{"name":"测试"},如果通过get方法传递数据,这条数据会被拼接到url请求的后面。

uri本身是采用ASCII编码的,所以如果是非ASCII编码集的字符在传输时都会被编码,编码方法和encodeURI的编码规则相同,但是这里的编码规则是由浏览器控制的。

除此之外不同的浏览器采用的编码方式(UTF-8,GBK)不一样,被编码的数据发送给服务器,服务器用iso-8859-1编码对数据解码,后端人员通过request.getParameter("name")获取参数数据。

⑸ 如何通过html5调用摄像头拍照

这个是前台HTML的代码。

<div id="contentHolder">

<video id="video" width="320" height="320" autoplay>

</video>

<button id="snap" style="display:none"> 拍照</button>

<canvas style="display:none" id="canvas" width="320" height="320">

</canvas>

</div>
复制代码

下面这个是主要代码了。(jquery)
<script>

//判断浏览器是否支持HTML5 Canvas

window.onload = function () {

try {

//动态创建一个canvas元 ,并获取他2Dcontext。如果出现异常则表示不支持 document.createElement("canvas").getContext("2d");

document.getElementByIdx("support").innerHTML = "浏览器支持HTML5 CANVAS";

}

catch (e) {

document.getElementByIdx("support").innerHTML = "浏览器不支持HTML5 CANVAS";

}

};

//这段代 主要是获取摄像头的视频流并显示在Video 签中

window.addEventListener("DOMContentLoaded", function () {

var canvas = document.getElementByIdx("canvas"),

context = canvas.getContext("2d"),

video = document.getElementByIdx("video"),

videoObj = { "video": true },

errBack = function (error) {

console.log("Video capture error: ", error.code);

};

//navigator.getUserMedia这个写法在Opera中好像是navigator.getUserMedianow

if (navigator.getUserMedia) {

navigator.getUserMedia(videoObj, function (stream) {

video.src = stream;

video.play();

}, errBack);

} else if (navigator.webkitGetUserMedia) {

navigator.webkitGetUserMedia(videoObj, function (stream) {

video.src = window.webkitURL.createObjectURL(stream);

video.play();

}, errBack);

}

//这个是拍照按钮的事件,

$("#snap").click(function () {

context.drawImage(video, 0, 0, 320, 320);

//CatchCode();

});

}, false);

//定时器

var interval = setInterval(CatchCode, "300");

//这个是 刷新上 图像的

function CatchCode() {

$("#snap").click();

//实际运用可不写,测试代 , 为单击拍照按钮就获取了当前图像,有其他用途

var canvans = document.getElementByIdx("canvas");

//获取浏览器页面的画布对象

//以下开始编 数据

var imgData = canvans.toDataURL();

//将图像转换为base64数据

var base64Data = imgData.substr(22);

//在前端截取22位之后的字符串作为图像数据

//开始异步上

$.post("uploadImgCode.ashx", { "img": base64Data }, function (data, status) {

if (status == "success") {

if (data == "OK") {

alert("二维 已经解析");

}

else {

// alert(data);

}

}

else {

alert("数据上 失败");

} }, "text");

}

</script>
复制代码

最后的就是接收经过base64编码之后的图像文件了。

public void ProcessRequest (HttpContext context) {

string img;//接收经过base64编 之后的字符串

context.Response.ContentType = "text/plain";

try {

img =context.Request["img"].ToString();

//获取base64字符串

byte[] imgBytes = Convert.FromBase64String(img);

//将base64字符串转换为字节数组

System.IO.Stream stream = new System.IO.MemoryStream(imgBytes);

//将字节数组转换为字节流

//将流转回Image,用于将PNG 式照片转为jpg,压缩体积以便保存。

System.Drawing.Image imgae = System.Drawing.Image.FromStream(stream);

imgae.Save(context.Server.MapPath("~/Test/") + Guid.NewGuid().ToString()+".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);//保存图片

context.Response.Write("OK");//输出调用结果

} catch (Exception msg) {

img = null;

context.Response.Write(msg);

return;

}

}

⑹ Html5移动端上传图片并裁剪 - Clipic.js

Clipic.js插件可以为移动端 (仅支持移动端) 提供头像上传并裁剪成指定尺寸,用原生js开发的,轻量级,包含html跟css,不到8kb。点此链接体验: https://teojs.github.io/clipic/

https://github.com/teojs/clipic

参数说明

width:Number (默认:500) – 裁剪宽度
height:Number (默认:500) – 裁剪高度
ratio:Number (可选) – 裁剪的比例,当传入ratio时width/height将无效
src:String (必传) – 需要裁剪的图片,可以是图片链接,或者 base64
type:String (默认:jpeg) – 裁剪后图片的类型,仅支持 jpeg/png 两种
quality:Number (默认:0.9) – 压缩质量
buttonText:Array (默认:[‘取消’, ‘重置’, ‘完成’]) – 底部三个按钮文本

http://bbs.itying.com/topic/5cb17892c6a71b10bcef96b0

⑺ 手机移动端html5、js如何实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量

你好 HTML5和javascript是不能压缩视频的,只能把视频传到服务器端,由后端来压缩视频,也不能控制相机的拍摄质量,除非你用JAVA写Android客户端才可以压缩。希望我的回答能够帮助到你,如果还有什么疑问可以继续追问。

⑻ ios html5 拍照上传 照片调整90度 为什么上传之后 又返回来了

它的主要功能就是上传两张人像,通过算法进行分析对比,最后得出一个相似度的分数,以验证你们是天造地设还是颜值互补。

但是,当我们把上传的图片转换成base64格式,发送给后台时,会发现偶尔会出现问题,有一些图片本来是这样的:

柴犬

处理之后却变成了这样:

柴犬2

经过测试发现,只有iOS手机竖着拍的照片才会出现这样的问题,而iOS手机横着拍的照片、Android手机拍的照片以及通过屏幕截图、网络下载等途径获得的图片都不会产生这个问题。

那么,这到底是为什么呢?

在开发过程中,由于时间紧迫,未求甚解,使用了github上的一个开源项目 lrz.js 来解决此问题,这个工具的主要用途是在尽量保证图片质量的前提下压缩图片的大小,但同时也附带了图片旋转角度纠正的功能。

通过阅读 lrz.js 的源代码,我发现它引入了一个叫做 exif.js 的库来实现旋转角度的纠正,它提供了js读取图像的原始数据的功能扩展,例如:拍照方向、相机设备型号、拍摄时间、ISO 感光度、GPS 地理位置等数据。而拍照方向就是关键所在!

exif.js 获取图像的拍照方向的代码如下:

EXIF.getData(IMG_FILE, function () { // IMG_FILE为图像数据
var orientation = EXIF.getTag(this, "Orientation");
console.log("Orientation:" + orientation); // 拍照方向
});

获取拍照方向的结果为1-8的数字:

拍照方向信息

注意:对于上面的八种方向中,加了*的并不常见,因为它们代表的是镜像方向,如果不做任何的处理,不管相机以任何角度拍摄,都无法出现镜像的情况。

这个表格代表什么意义?我们来看第一行,值为1时,右边两列的值分别为:Row #0 is Top,Column #0 is Left side,其实很好理解,它表示照片的第一行位于顶端,而第一列位于左侧,那么这张照片自然就是以正常角度拍摄的。

而这8种结果,就是第一行与第一列所在的位置的8种组合。

那么,我们来测试一下iOS手机横着拍的照片,来看看它的拍照方向是什么呢?

测试1

结果是1,即以正常角度拍摄的,其实也就是原图啦~

那么,我们再测试一下iOS手机竖着拍的照片,来看看它的拍照方向是什么呢?

测试2

原来是6!即第一行位于右侧,第一列位于顶端,其实相当于将照片顺时针旋转了90度!

所以,实际上iOS手机竖着拍出的照片与横着拍出的照片其本质上是一样的,只不过竖着拍出的照片被添加了一个顺时针旋转90°的拍照方向,所以显示的时候,就变成了上下边窄左右边宽的状态,其实也就是横着拍的照片顺时针旋转90°而成的~

那么明白了这些,文章开头所说的照片旋转bug的原因,也就很简单啦~

其实就是当我们在前端对图片进行像素处理或者drawInRect等操作之后,照片的Orientaion信息,即为拍照方向信息被删除了,所以iOS手机竖着拍的照片又回到了横着的状态,看起来也就是逆时针旋转了90°!

那么如何纠正这个旋转角度呢?

其实思路也很简单:在处理图片之前,先读取并保存图片的拍照方向信息,然后在处理图片之后,再根据拍照方向,对图片进行相应的调整,lrz.js 中的代码如下:

switch (orientation) {
case 3:
ctx.rotate(180 * Math.PI / 180);
ctx.drawImage(img, -resize.width, -resize.height, resize.width, resize.height);
break;
case 6:
ctx.rotate(90 * Math.PI / 180);
ctx.drawImage(img, 0, -resize.width, resize.height, resize.width);
break;
case 8:
ctx.rotate(270 * Math.PI / 180);
ctx.drawImage(img, -resize.height, 0, resize.height, resize.width);
break;
case 2:
ctx.translate(resize.width, 0);
ctx.scale(-1, 1);
ctx.drawImage(img, 0, 0, resize.width, resize.height);
break;
case 4:
ctx.translate(resize.width, 0);
ctx.scale(-1, 1);
ctx.rotate(180 * Math.PI / 180);
ctx.drawImage(img, -resize.width, -resize.height, resize.width, resize.height);
break;
case 5:
ctx.translate(resize.width, 0);
ctx.scale(-1, 1);
ctx.rotate(90 * Math.PI / 180);
ctx.drawImage(img, 0, -resize.width, resize.height, resize.width);
break;
case 7:
ctx.translate(resize.width, 0);
ctx.scale(-1, 1);
ctx.rotate(270 * Math.PI / 180);
ctx.drawImage(img, -resize.height, 0, resize.height, resize.width);
break;
default:
ctx.drawImage(img, 0, 0, resize.width,resize.height);
}

其中,translate是平移变换,scale(-1,1)是向左翻转,rotate是顺时针旋转。

举例说明 case 2,当图片的拍照方向为2时,即第一行位于顶端,而第一列位于右侧,其实相当于把照片进行了左右的翻转。所以,这里对图片的操作是,先向右平移等于图片宽度的距离,再向左翻转,这相当于以图片水平方向的对称轴为轴进行了左右翻转,然后再以(0,0)为起始点绘制原宽高的图片,即完成了对拍照方向的纠正。

最后

经过一系列的测试,发现确实只有iOS手机的竖拍照片与横拍照片是通过拍照方向来区别的,Android手机无论竖拍还是横拍的照片,拍照方向都为1,也就是说即使丢失了拍照方向这一信息,也不会影响到图片的旋转角度。而手机或电脑的屏幕截图、网络上的图片、通过PS制作的图片等也是如此。

作者:任无名F
链接:http://www.jianshu.com/p/ad4501db178e
来源:简书
着作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

⑼ html5做好压缩包,解压到网站目录,显示这个界面怎么办啊!求大佬解答!

默认文档没设置好,或者打开浏览目录了,最主要的是看你文件不全和错放位置,建议多花时间耐心学习下,事半功倍,还有其他不会要学习的也可以找额解决,谢谢

阅读全文

与html5base64压缩相关的资料

热点内容
163邮箱服务器的ip地址 浏览:46
服务器跟域是什么 浏览:124
rails启动命令 浏览:461
logistic命令怎么用 浏览:736
c语言点滴pdf 浏览:745
linuxrtc编程 浏览:256
linux打包并压缩命令 浏览:642
aes加密的证书格式 浏览:97
oracledbcalinux 浏览:842
酬勤任务app怎么被特邀 浏览:197
android应用文件夹 浏览:1000
平面设计法则pdf 浏览:337
3d圆角命令怎么用 浏览:567
程序员买意外险还是重疾险 浏览:619
辽宁的dns服务器地址云空间 浏览:446
我的世界服务器断开后怎么连接 浏览:413
htmltopdfpython 浏览:75
如何预览网站源码文件 浏览:35
怎么修改后台源码 浏览:28
bat编程入门 浏览:853