本示例使用HTML5 canvas,简单的编写了上传头像的裁剪效果,移动端支持拖拽后裁剪, 虽然样式不好看,但是功能还算全:
下图为裁剪后的效果:
html部分:
XML/HTML Code复制内容到剪贴板
- nbsp;html>
-
html lang="en">
-
head>
-
meta charset="UTF-8">
-
title>上传头像title>
-
meta name="renderer" content="webkit">
-
meta name="viewport" content="width=device-width, initial-scale=1.0">
-
head>
-
body>
-
div id="imgCrop" style="width:200px;height:200px;border:1px solid #ccc;overflow:hidden;">
-
img src="img/test.jpg" alt="">
-
div>
-
input type="file" accept="image/*" />
-
button id="save">保存button>
-
p>下面为剪切的图片:p>
-
div id="imgShow">div>
-
body>
-
html>
JavaScript部分:
JavaScript Code复制内容到剪贴板
- var $imgCrop = $("#imgCrop");
-
var $img = $imgCrop.find("img");
-
var img = $img[0];
-
var width = parseInt($imgCrop.css("width"));
-
var height = parseInt($imgCrop.css("height"));
-
var startX,startY,scale = 1;
-
var x = 0,y = 0;
-
$("input").on("change",function(){
-
var fr = new FileReader();
-
var file = this.files[0]
-
-
if(!/image\/\w+/.test(file.type)){
-
alert(file.name + "不是图片文件!");
-
return;
- }
- console.log(file);
-
$img.removeAttr("height width");
- fr.readAsDataURL(file);
-
-
fr.onload = function(){
- img.src = fr.result;
-
var widthInit = img.width;
-
if(img.width>img.height){
- img.height = height;
- x = (width - img.width)/2;
- y = 0;
-
}else{
- img.width = width;
- x = 0;
- y = (height - img.height)/2;
- }
- scale = widthInit/img.width;
- move($img, x, y);
-
- };
-
- });
-
-
img.addEventListener("touchstart",function(e){
- startX = e.targetTouches[0].pageX;
- startY = e.targetTouches[0].pageY;
-
-
return;
-
- });
-
img.addEventListener("touchmove",function(e){
- e.preventDefault();
- e.stopPropagation();
-
-
var changeX = e.changedTouches[0].pageX - startX + x;
-
var changeY = e.changedTouches[0].pageY - startY + y;
-
-
move($(this), changeX, changeY);
-
return;
-
- });
-
img.addEventListener("touchend",function(e){
-
var changeX = e.changedTouches[0].pageX - startX + x;
-
var changeY = e.changedTouches[0].pageY - startY + y;
-
- x = x + e.changedTouches[0].pageX - startX;
- y = y + e.changedTouches[0].pageY - startY;
-
-
move($(this), changeX, changeY);
-
return;
-
- });
-
-
function move(ele, x, y){
- ele.css({
-
'-webkit-transform' : 'translate3d(' + x + 'px, ' + y + 'px, 0)',
-
'transform' : 'translate3d(' + x + 'px, ' + y + 'px, 0)'
- });
- }
-
-
$("#save").on("click",function(){
-
var url = imageData($img);
- console.log(url);
-
-
$("#imgShow").html("+url+" />");;
- });
-
-
function imageData($img) {
-
var canvas = document.createElement('canvas');
-
var ctx = canvas.getContext('2d');
- canvas.width = width ;
- canvas.height = height;
- ctx.drawImage(img, -x*scale, -y*scale, width*scale, height*scale, 0, 0, width, height);
-
return canvas.toDataURL();
- }
-
以上就是本文的全部内容,希望对大家的学习有所帮助。
原文:http://www.cnblogs.com/yifengBlog/p/5265598.html
Statement:The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn