use*_*543 5 javascript html5 canvas image html5-canvas
我正在尝试制作一个小画布功能,该功能可以让您上传图片并在其上添加覆盖。我可以上传,在顶部创建图片并下载,但是当我尝试通过电话上传图片时。它将图像旋转90度。
我在这里想念什么吗?在将图像添加到画布之前,是否需要测试图像的大小并对其进行缩放。
任何帮助将是很大的帮助,谢谢。
<style>
.box{
width: 300px;
height: 300px;
border: 1px solid blue;
padding: 1em;
}
.wrap{
width: 180px;
height: 180px;
margin: 0 auto;
background: red;
position: relative;
}
</style>
<div class="box">
<div class="wrap">
<canvas id="canvas" width="180" height="180"></canvas>
</div>
<br />
<label>Image File:</label><br/>
<input type="file" id="imageLoader" name="imageLoader"/>
<br />
<br />
<a href="#" clss="buttonLink" id="downloadLink">Download!</a>
</div>
<script>
$(document).ready(function() {
//upload images.
var imageLoader = document.getElementById('imageLoader');
imageLoader.addEventListener('change', handleImage, false);
//draw image.
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
//download link.
var downloadLink = document.getElementById('downloadLink');
//upload image.
function handleImage(e){
var reader = new FileReader();
reader.onload = function(event){
var img = new Image();
img.setAttribute('crossOrigin', 'anonymous');
var width = 180;
var height = 180;
img.onload = function(){
context.drawImage(img,0,0, width, height);
var imageObj = new Image();
imageObj.setAttribute('crossOrigin', 'anonymous');
imageObj.onload = function() {
context.drawImage(imageObj, 69, 50);
};
imageObj.src = icon.png';
}
img.src = event.target.result;
}
reader.readAsDataURL(e.target.files[0]);
};
//download link.
downloadLink.onclick = function () {
downloadLink.href = canvas.toDataURL();
downloadLink.download = 'facebook';
};
});
</script>
Run Code Online (Sandbox Code Playgroud)
您需要读取 EXIF 数据并采取相应措施。\n读取数据的示例库:\n https://github.com/exif-js/exif-js
\n\n也已经回答了问题\n JS 客户端 Exif 方向:旋转和镜像 JPEG 图像
\n\n同样来自另一个来源,这就是您应该如何处理画布上的 exif 方向:
\n\nswitch(orientation){\n case 2:\n // horizontal flip\n ctx.translate(canvas.width, 0);\n ctx.scale(-1, 1);\n break;\n case 3:\n // 180\xc2\xb0 rotate left\n ctx.translate(canvas.width, canvas.height);\n ctx.rotate(Math.PI);\n break;\n case 4:\n // vertical flip\n ctx.translate(0, canvas.height);\n ctx.scale(1, -1);\n break;\n case 5:\n // vertical flip + 90 rotate right\n ctx.rotate(0.5 * Math.PI);\n ctx.scale(1, -1);\n break;\n case 6:\n // 90\xc2\xb0 rotate right\n ctx.rotate(0.5 * Math.PI);\n ctx.translate(0, -canvas.height);\n break;\n case 7:\n // horizontal flip + 90 rotate right\n ctx.rotate(0.5 * Math.PI);\n ctx.translate(canvas.width, -canvas.height);\n ctx.scale(-1, 1);\n break;\n case 8:\n // 90\xc2\xb0 rotate left\n ctx.rotate(-0.5 * Math.PI);\n ctx.translate(-canvas.width, 0);\n break;\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
815 次 |
| 最近记录: |