在画布上拖动和绘制时传输图像数据
Image data transfer on drag and draw on canvas
我正在从PC上传一个图像。然后我用文件读取器读取文件,并通过创建img标签来显示图像。然后,我将图像从img标记拖动到画布中,并将其绘制到画布上。我正在使用dragstart和onDrop事件。我使用datatransfer.setdata()
和datatransfer.getdata()
作为功能。但在下降时,画布上绘制的图像并不像原来那样原始。这是放大版。我不知道为什么会发生这种事!
这是我的代码:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Drag Demo</title>
<link href="copy.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div class="container">
<div style = "border:2px solid black;">
<canvas id = "canvas" style = "position:relative;width:1000px;height:1000px;top:0px;left:200px; border:2px solid black;" ondrop="dropIt(event);" ondragover="event.preventDefault();"> </canvas>
</div>
<div>
<input type="file" id="fileElem" accept="image/*" style="display:none" >
<div id="fileSelect" class="drop-area">Select some files</div>
</div>
<div id="thumbnail"></div>
</div>
<script type="text/javascript">
function dragIt(event) {
event.dataTransfer.setData("URL", event.target.id)
};
function dropIt(event) {
var theData = event.dataTransfer.getData("URL");
dt = document.getElementById(theData);
alert(dt.width);
alert(dt.height);
event.preventDefault();
var c = document.getElementById("canvas");
var ctx = c.getContext('2d');
ctx.drawImage(dt, 0, 0);
};
var count = 0;
var fileSelect = document.getElementById("fileSelect"),
fileElem = document.getElementById("fileElem");
fileElem.addEventListener("change",function(e){
var files = this.files
handleFiles(files)
},false)
fileSelect.addEventListener("click", function (e) {
fileElem.click();
e.preventDefault();
}, false);
function handleFiles(files) {
for (var i = 0; i < files.length; i++) {
var file = files[i];
var imageType = /image.*/;
if(!file.type.match(imageType)){
console.log("Not an Image");
continue;
}
var image = document.createElement("img");
var thumbnail = document.getElementById("thumbnail");
image.file = file;
function handlefilereader(evt){
var target = evt.target || evt.srcElement;
image.src = evt.target.result;
}
if(document.all) {
image.src = document.getElementById('fileElem').value;
}
else {
var reader = new FileReader()
reader.onload = handlefilereader;
reader.readAsDataURL(file);
}
image.id = count;
count++;
thumbnail.appendChild(image);
alert(image.width);
image.draggable = true;
image.ondragstart = dragIt;
}
}
</script>
</body>
</html>
画布有两种"大小"设置:通过CSS可以设置DISPLAY大小,因此要设置画布的PHYSICAL大小,必须使用其属性。所以没有CSS/样式。
这样想:您创建一个物理大小为:(比方说)400px*400px的IMAGE
然后,就像具有物理大小的普通图像(jpg、png、gif)一样,您仍然可以选择更改DISPLAYED大小,从而更改纵横比:如800px*600px。通常支持偶数%。
希望这能清楚地解释为什么会发生这种情况,以及为什么你在评论中的解决方案也是正确的解决方案!!
相关文章:
- cordova图像上传出现文件传输错误
- 有人可以帮助我使用Web应用程序来模拟图像传输吗?
- 图像文件因websocket文件传输而损坏
- 在画布上拖动和绘制时传输图像数据
- 如何使用 express js 3.X 和 angular js 将图像流式传输到 Amazon s3
- 通过 socket.io 流流式传输广播图像
- 科尔多瓦多图像上传与文件传输
- OO Javascript 调试 - 使用传输进行图像交换
- 通过Websocket将图像传输到WebGL Vs Canvas,也许还可以与worker一起传输
- 是否可以将图像数据从服务器流式传输到html
- 资源被解释为图像,但使用MIME类型的应用程序/八位字节流传输
- 如何传输文本,音频&使用Webrtc数据通道从一个对等端到另一个对等点的图像文件
- 将数组值传输到图像源
- 节点文件传输在images目录中上载x字节的图像,但已损坏
- 在winjs中通过背景传输上传之前调整图像大小
- 如何从json数据传输读取图像
- 使用phonegap传输图像到php时出现错误
- 淡入淡出图像之间没有黑色传输-JQuery
- 使用本地服务器流式传输图像
- jquery传输图像动画