gpt4 book ai didi

javascript - 图像比 Canvas 上的原始图像小以制作drawImage()

转载 作者:行者123 更新时间:2023-11-28 00:20:03 24 4
gpt4 key购买 nike

我正在开发一个使用 html5 canvas 的图像过滤系统,但是,正如我一开始的那样,我出现了一些疑问和错误。

这是我迄今为止开发的内容:

$(document).ready(function() {
$("#uploadImagem").change(function(e) {
var _URL = window.URL || window.webkitURL,
arquivo = e.target.files[0],
tipoImagem = /image.*/,
reader,
imagem;

if(!arquivo.type.match(tipoImagem)) {
alert("Somente imagens são aceitas!");
return;
}

imagem = new Image();

imagem.onload = function() {
if(this.width > 600 || this.height > 400) {
alert("Somente imagens com largura máxima de 600px e altura máxima de 400px");
return;
} else {
$("#filtrarImagem").width(this.width).height(this.height);
}
};

imagem.src = _URL.createObjectURL(arquivo);

reader = new FileReader();
reader.onload = fileOnload;
reader.readAsDataURL(arquivo);
});

function fileOnload(e) {
var $img = $("<img>", {src: e.target.result}),
canvas = $("#filtrarImagem")[0],
context = canvas.getContext("2d");

$img.load(function() {
context.drawImage(this, 0, 0);
});
}
});
  1. 当我执行 imagem.onload... 时,我希望如果图像像素大于 600 和 400,他会发出警报并在那里停止,但即使如此图像也会出现在 Canvas 上。
  2. 在同一个imagem.onload...函数中,如果图像像素对应到 Canvas ,则需要(id = "filtrarImagem")为图像的大小,但是图像到 Canvas 变得比上传的原始尺寸小,她要占据所有 Canvas 并获取原始尺寸。

如何继续?

最佳答案

您有两个单独的图像加载处理程序。无需设置具有相同 URL 的两个图像源,只需重复使用单个图像即可检查尺寸和设置 Canvas 尺寸并将其绘制到 Canvas 中。

我建议执行以下步骤(您使用 jQuery 标记了问题,但我强烈建议您在使用非 DOM 导向元素(例如 Canvas )时使用普通 JavaScript)。

示例

if (typeof window.URL === "undefined") window.URL = window.webkitURL;

$("input")[0].onchange = function(e) {
var arquivo = e.target.files[0],
imagem = new Image();

if (!arquivo.type.match(/image.*/)) {
alert("Somente imagens são aceitas!");
return;
}

// STEP 1: load as image
imagem.onload = doSetup;
imagem.src = URL.createObjectURL(arquivo)
};

// STEP 2: now that we have the image loaded we can check size and setup canvas
function doSetup() {
URL.revokeObjectURL(this.src); // clean up memory for object-URL

if (this.width > 600 || this.height > 400) {
alert("Too big!");
return; // exit!
}

// image OK, setup canvas
var c = $("canvas")[0]; // work with the element itself, not the jQuery object
c.width = this.width; // important: use canvas.width, not style or css
c.height = this.height;

// draw in image
var ctx = c.getContext("2d");
ctx.drawImage(this, 0, 0);
// NEXT: ... from here, invoke filter etc.
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file"><br><canvas></canvas>

关于javascript - 图像比 Canvas 上的原始图像小以制作drawImage(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30110135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com