在JavaScript中进行手机版图片裁剪并上传,通常涉及以下几个基础概念和技术点:
以下是一个简单的示例,展示了如何使用JavaScript实现手机版图片裁剪并上传:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>图片裁剪上传</title>
<style>
#imagePreview {
max-width: 100%;
height: auto;
}
</style>
</head>
<body>
<input type="file" id="fileInput" accept="image/*">
<canvas id="canvas" style="display:none;"></canvas>
<img id="imagePreview" alt="预览">
<button onclick="uploadImage()">上传</button>
<script>
let originalImage = new Image();
let cropStartX, cropStartY, cropEndX, cropEndY;
document.getElementById('fileInput').addEventListener('change', function(event) {
let file = event.target.files[0];
let reader = new FileReader();
reader.onload = function(e) {
originalImage.src = e.target.result;
originalImage.onload = function() {
document.getElementById('imagePreview').src = originalImage.src;
document.getElementById('canvas').width = originalImage.width;
document.getElementById('canvas').height = originalImage.height;
};
};
reader.readAsDataURL(file);
});
document.getElementById('imagePreview').addEventListener('touchstart', function(event) {
cropStartX = event.touches[0].clientX;
cropStartY = event.touches[0].clientY;
});
document.getElementById('imagePreview').addEventListener('touchend', function(event) {
cropEndX = event.changedTouches[0].clientX;
cropEndY = event.changedTouches[0].clientY;
drawCroppedImage();
});
function drawCroppedImage() {
let canvas = document.getElementById('canvas');
let ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(originalImage, cropStartX, cropStartY, cropEndX - cropStartX, cropEndY - cropStartY, 0, 0, cropEndX - cropStartX, cropEndY - cropStartY);
document.getElementById('imagePreview').src = canvas.toDataURL();
}
function uploadImage() {
let canvas = document.getElementById('canvas');
let dataURL = canvas.toDataURL('image/jpeg', 0.9);
let blob = dataURItoBlob(dataURL);
let formData = new FormData();
formData.append('file', blob, 'cropped.jpg');
fetch('/upload', {
method: 'POST',
body: formData
}).then(response => response.json())
.then(data => {
console.log('上传成功:', data);
}).catch(error => {
console.error('上传失败:', error);
});
}
function dataURItoBlob(dataURI) {
let byteString = atob(dataURI.split(',')[1]);
let mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
let ab = new ArrayBuffer(byteString.length);
let ia = new Uint8Array(ab);
for (let i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ab], {type: mimeString});
}
</script>
</body>
</html>
通过上述代码和解决方案,可以在手机版上实现图片的裁剪和上传功能。
领取专属 10元无门槛券
手把手带您无忧上云