网站建设资讯

NEWS

网站建设资讯

html5裁剪上传图片,html如何裁剪图片

如何使用HTML5实现拍照上传应

在HTML5规范的支持下,WebApp在手机上拍照已经成为可能。在下面,我将讲解Web App如何用手机进行拍照,显示在页面上并上传到服务器。

公司主营业务:网站制作、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出来安免费做网站回馈大家。

1、  视频流

  HTML5 The Media Capture API提供了对摄像头的可编程访问,用户可以直接用getUserMedia获得摄像头提供的视频流。我们需要做的是添加一个HTML5的Video标签,并将从摄像头获得视频作为这个标签的输入来源(请注意目前仅Chrome和Opera支持getUserMedia。补充:请使用Opera支持HTML5的新版本,如果是Chrome,版本需为Chrome 18.0.1008+,并使用about:flags来开启WebRTC,请看下图)。

[html] view plaincopy

video id="video" autoplay=""/video

script

var video_element = document.getElementById('video');

if (navigator.getUserMedia) { // opera should use opera.getUserMedia now, chrome use webkitGetUserMedia

   navigator.getUserMedia('video',success, error);

}

function success(stream) {

   video_element.src =stream;

}

/script

2、  拍照

  拍照功能,我们采用HTML5的Canvas实时捕获Video标签的内容,Video元素能作为Canvas图像的输入,这一点很棒。主要代码如下:

[html] view plaincopy

script

   var canvas =document.createElement('canvas');

   var ctx = canvas.getContext('2d');

   var cw = vw;

   var ch = vh;

   ctx.fillStyle = "#ffffff";

   ctx.fillRect(0, 0, cw, ch);

   ctx.drawImage(video_element, 0, 0, vvw,vvh, 0,0, vw,vh);

   document.body.append(canvas);

/script

3、  图片获取

  下面我们要从Canvas获取图片数据,其核心思路是用canvas的toDataURL将Canvas的数据转换为base64位编码的PNG图像,类似于“data:image/png;base64,xxxxx”的格式。

[html] view plaincopy

var imgData =canvas.toDataURL("image/png");

  因为真正图像数据是base64编码逗号之后的部分,所以我们实际服务器处理的图像数据应该是这部分,我们可以用两种办法来获取。

  第一种:是在前端截取22位以后的字符串作为图像数据,例如:

[html] view plaincopy

var data = imgData.substr(22);

  如果要在上传前获取图片的大小,可以使用:

[html] view plaincopy

var length = atob(data).length;// atob decodes a string of data which has been encoded using base-64 encoding

  第二种:是在后端获取传输的数据后用后台语言截取22位以后的字符串。例如PHP里:

[html] view plaincopy

$image = base64_decode( str_replace('data:image/jpeg;base64,', '',$data);

4、  图片上传

  在前端可以使用Ajax将上面获得的图片数据上传到后台脚本。例如使用jQuery时:

[html] view plaincopy

$.post('upload.php',{ 'data' : data } );

  在后台我们用PHP脚本接收数据并存储为图片。

[html] view plaincopy

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的输出转换为图片上传的功能。这样你可以使用Canvas为用户提供图片编辑,例如裁剪、上色、涂鸦的画板功能,然后把用户编辑完的图片保存到服务器上。

canvas图片剪切问题,求html5大神指点

看你描述应该是图片缩放导致的问题, 假设你图片是 300*300的 画布是150*150 你将图片放到画布上已经缩小一倍了 你移动 sx sy的时候 实际计算得将倍数算进去 比如你距离画布左边是10像素 实际上你获取图片的时候应该是 10*2=20 这样猜才对

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

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

参数说明

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 (默认:[‘取消’, ‘重置’, ‘完成’]) – 底部三个按钮文本

html5拖拽图片上传,怎么获得图片原始尺寸

拖拽的过程就不说了,这里主要说一下如何在前端获取到图片的相关信息。

html5里有一个fileReader的全局变量,用来读取本地文件,比如txt,img等,下面是一个简单的代码。

function checkFile(files){

var file = files[0];

var reader = new FileReader();

// show表示div id='show'/div,用来展示图片预览的

if(!/image\/\w+/.test(file.type)){

show.innerHTML = "请确保文件为图像类型";

return false;

}

// onload是异步操作

reader.onload = function(e){

show.innerHTML = 'img src="'+e.target.result+'" alt="img"';

}

reader.readAsDataURL(file);

}

这样就能够在不上传到服务器的前提下预览图片。当然,这个问题的重点是获取图片的原始尺寸,html5里还提供了两个变量来获取:naturalWidth和naturalHeight,这两个分别来获取图片的原始宽度和原始高度。

在上面的例子中,就能通过下面的方式获取到:

var width = e.target.naturalWidth;

var height = e.target.naturalHeight;

还有一种情况就是,如果已经存在页面里的图片,怎么获取到原始尺寸呢,可以这样:

var img = document.getElementsByTagName('img')[0]; // 获取到图片

var width = img.naturalWidth;

var height = img.naturalHeight;

做一个简易图片编辑器,要求能从本地打开图片,有裁剪功能,用HTML5,jquery和css3,

这里有一个用jquery做的 图片剪切上传的插件 你看下 满足你的需要不

如何使用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应用上来。

相关规范:

The MediaCapture API:

Canvas:


当前标题:html5裁剪上传图片,html如何裁剪图片
当前网址:http://cdweb.net/article/dsgiopd.html