点击(此处)折叠或打开
-
<!DOCTYPE html>
-
<html lang="en">
-
<head>
-
<meta charset="UTF-8">
-
<title>Document</title>
-
</head>
-
<body>
-
<form name='test'>
-
<input type="file" name='file'>
-
<button id="clip">裁剪</button>
-
<input type="submit" value="提交">
-
</form>
-
<img src="" >
-
<canvas width="800" height="600" style="border:1px solid #d3d3d3;background:#ffffff;"></canvas>
-
<script>
-
var canvas,ctx,img;
-
window.onload = function(){
-
canvas = document.querySelector('canvas');
-
ctx = canvas.getContext('2d');
-
img = document.querySelector('img');
-
-
-
document.test.file.addEventListener('change', function() {
-
var fr = new FileReader();
-
fr.onload = function() {
-
preview = this.result;
-
img.src = preview;
-
img.onload = function(){
-
//ctx.clearRect(0, 0, canvas.width, canvas.height); //画布全清
-
ctx.drawImage(img, 0,0, this.width, this.height);
-
}
-
};
-
fr.readAsDataURL(this.files[0]);
-
});
-
-
document.test.addEventListener('submit', function(e) {
-
e.preventDefault();
-
var binaryString = atob(preview.split(',')[1]),
-
mimeType = preview.split(',')[0].match(/:(.*?);/)[1],
-
length = binaryString.length,
-
u8arr = new Uint8Array(length),
-
blob,
-
fd = new FormData(),
-
xhr = new XMLHttpRequest();
-
while(length--) {
-
u8arr[length] = binaryString.charCodeAt(length);
-
}
-
blob = new Blob([u8arr.buffer], {type: mimeType});
-
fd.append('file', blob);
-
xhr.open('post', '/upload/upload.php');
-
xhr.send(fd);
-
});
-
-
/////////////////////////////////////////////
-
//获取裁剪的两个顶点
-
var sPoint = {},
-
ePoint = {};
-
canvas.addEventListener('mousedown', function(e) {
-
if(e.button === 0) {
-
sPoint.x = e.offsetX;
-
sPoint.y = e.offsetY;
-
sPoint.drag = true;
-
}
-
});
-
-
canvas.addEventListener('mousemove', function(e) {
-
if(e.button === 0 && sPoint.drag) {var nPoint = {
-
x: e.offsetX,
-
y: e.offsetY
-
};
-
ctx.save(); //clip要通过restore回复
-
ctx.clearRect(0, 0, canvas.width, canvas.height); //画布全清
-
drawImage(); //绘制底图
-
drawCover(); //绘制阴影
-
ctx.beginPath(); //开始路径
-
ctx.rect(sPoint.x, sPoint.y, nPoint.x - sPoint.x, nPoint.y - sPoint.y); //设置路径为选取框
-
ctx.clip(); //截取路径内为新的作用区域
-
drawImage(); //在选取框内绘制底图
-
ctx.restore(); //恢复clip截取的作用范围
-
}
-
});
-
-
//松开鼠标
-
canvas.addEventListener('mouseup', function(e) {
-
if(e.button === 0) {
-
sPoint.drag = false;
-
ePoint.x = e.offsetX;
-
ePoint.y = e.offsetY;
-
}else if(e.button === 2) {
-
restore();
-
}
-
});
-
-
var clip = document.querySelector('#clip');
-
clip.addEventListener('click', function(e) {
-
e.preventDefault(); //阻止默认事件,不然会触发form的submit
-
if(sPoint.x !== undefined && ePoint.x !== undefined) {
-
var imgData = ctx.getImageData(sPoint.x, sPoint.y, ePoint.x - sPoint.x, ePoint.y - sPoint.y); //把裁剪区域的图片信息提取出来
-
ctx.clearRect(0, 0, canvas.width, canvas.height); //清空画布
-
canvas.width = Math.abs(ePoint.x - sPoint.x); //重置canvas的大小为新图的大小
-
canvas.height = Math.abs(ePoint.y - sPoint.y);
-
ctx.putImageData(imgData, 0, 0); //把提取出来的图片信息放进canvas中
-
preview = canvas.toDataURL();
-
img.src = canvas.toDataURL(); //裁剪后我们用新图替换底图,方便继续处理
-
}else {
-
alert('没有选择区域');
-
}
-
});
-
-
document.addEventListener('contextmenu', function(e) {
-
e.preventDefault();
-
e.stopPropagation();
-
});
-
}
-
-
-
////////////////////////////////////
-
-
function drawImage() {
-
ctx.drawImage(img, 0,0,img.width, img.height); //把图片绘制到canvas上
-
}
-
//绘制矩形框
-
function drawCover() {
-
ctx.save();
-
ctx.fillStyle = 'rgba(0, 0, 0, 0.3)';
-
ctx.fillRect(0, 0, canvas.width, canvas.height);
-
ctx.restore();
-
}
-
-
function restore() {
-
sPoint = {};
-
ePoint = {};
-
drawImage();
-
}
-
-
</script>
-
</body>
- </html>
点击(此处)折叠或打开
-
<?php
-
print_r($_FILES);
-
move_uploaded_file($_FILES['file']['tmp_name'], time().".jpg" );
- ?>