画布绘制图像不接受宽度和高度
Canvas drawImage is not accepting width and height
图像正在以完整的原始大小创建,即使是最后两个参数150, 150
在下面的代码中context.drawImage(img, 0, 0, 150, 150);
高度和宽度:
function (file) { //uploaded files are always images
var reader = new FileReader(); //FileReader for uploading files from local stroge.
reader.onload = function () {
var links = document.createElement('a'); //link when image is clicked
var img = document.createElement('img');
img.src = reader.result; //src = url from uploaded file
img.className = 'images'; //css -> .images { margin-top: 30px; padding: 30px; }
img.onload = function () { //repaint image to 150 - 150 size with canvas, because setting width and height on image itself would just resize the image but I want to create new image with new size
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
context.drawImage(img, 0, 0, 150, 150) //draw image with canvas
}
links.href = reader.result; // url from local storage needed when image is clicked -
links.target = "_blank"; // open new blank page with original image
links.appendChild(img); // image is appended to <a>
document.body.appendChild(links); // <a> is appended to body, that body contains image thumbnail with a link linked to the image source
}
if (file) {
reader.readAsDataURL(file); // read uploaded files url
}
}
img.onload
在这里没有任何意义。 即使我删除它,结果也是一样的。
您没有将裁剪后的图像拉回<img>
标签...您将必须创建两个图像对象,让我们调用第一个originalImage
,第二个croppedImage
。
您将附加到文档中的那个是croppedImage
的,originalImage
将只保留在缓存中。
加载originalImage
后,将其绘制到画布上,然后将croppedImage
设置为画布toDataURL()
方法的结果。
var read = function() {
var file = this.files[0];
var reader = new FileReader();
reader.onload = function() {
var links = document.createElement('a');
// this will be the appended image
var croppedImage = new Image();
// do your DOM stuff
croppedImage.className = 'images';
links.href = reader.result;
links.target = "_blank";
links.appendChild(croppedImage);
document.body.appendChild(links);
// create a buffer image object
var originalImage = new Image();
// set its load handler
originalImage.onload = function() {
// create a canvas
var canvas = document.createElement('canvas');
// set canvas width/height
canvas.width = canvas.height = 150;
var context = canvas.getContext('2d');
// draw the buffered image to the canvas at required dimension
context.drawImage(originalImage, 0, 0, 150, 150);
// set the appended to doc image's src to the result of the cropping operation
croppedImage.src = canvas.toDataURL();
}
originalImage.src = reader.result;
}
if (file) {
reader.readAsDataURL(file);
}
};
upload.onchange = read;
.images {
margin-top: 30px;
padding: 30px;
}
<input type="file" id="upload" />
您也可以只使用单个图像对象,但这需要在 onload
事件中重置 onload
事件,以避免无限循环,这有点不太清楚:
var read = function() {
var file = this.files[0];
var reader = new FileReader();
reader.onload = function() {
var links = document.createElement('a');
var img = new Image();
img.className = 'images';
links.href = reader.result;
links.target = "_blank";
links.appendChild(img);
document.body.appendChild(links);
img.onload = function() {
//reset the onload event so it does fire in a loop
img.onload = function(){return;};
var canvas = document.createElement('canvas');
canvas.width = canvas.height = 150;
var context = canvas.getContext('2d');
context.drawImage(this, 0, 0, 150, 150);
this.src = canvas.toDataURL();
}
img.src = reader.result;
}
if (file) {
reader.readAsDataURL(file);
}
};
upload.onchange = read;
.images {
margin-top: 30px;
padding: 30px;
}
<input type="file" id="upload" />
var reader = new FileReader();
reader.onload = function () {
var links = document.createElement('a');
var img = new Image();
img.src = reader.result;
img.className = 'images';
img.onload = function () {
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
context.drawImage(this, 0, 0, 150, 150);
this.src = canvas.toDataURL(); // convert the canvas back to the image
links.appendChild(this); // append the updated image to the document
}
links.href = reader.result;
links.target = "_blank";
document.body.appendChild(links);
}
if (file) {
reader.readAsDataURL(file); //reads the data as a URL
}
相关文章:
- autocomplete不接受源的json对象
- 不接受0-0-0的正则表达式是什么
- Javascript Regexp-不接受空格,但应该接受
- mandrill合并标记不接受变量值
- 一个jquery验证器方法,它不接受纯数字或纯特殊字符,但接受上面是否有字母
- Moment.js不接受变量作为参数
- 时间字段上的JavaScript验证(不接受0:00格式)
- 不接受传递给javascript的参数
- 为什么 Array.prototype.reduce() 不接受 Map 对象作为初始值
- 输入类型数字,只接受数字,不接受字母jQuery
- 向以下代码添加不接受“0”的另一个条件
- IE 不接受第三方 cookie P3P 策略设置
- 节点.JS - 文件名不接受变量
- 电子邮件验证不接受仅包含两个字符的域
- 表单不接受新值
- Angular$http.jsonp-服务器don'不接受JSON_CALLBACK
- @RequestParam不接受'&'在从请求发送的字符串中,存储&并截断其余部分
- Chrome扩展:storage.set()不接受变量作为关键字
- jquery不接受带引号的变量
- 画布绘制图像不接受宽度和高度