我正在编写这段代码,目标是:检查是否是PNG,检查是否是256X256,并将img转换为base64以上传到服务器。
因此,如果我选择 256 x 256 img,它会加载,但是,如果我在选择 256 x 256 后加载另一个不是 256 x 256 的 img,它会加载,我不知道为什么!我该如何解决?
function isFileImage(file) {
const acceptedImageTypes = ['image/png'];
return file && acceptedImageTypes.includes(file['type'])
}
function importFileandPreview() {
var preview = document.querySelector('img');
var file = document.querySelector('input[type=file]').files[0];
var reader = new FileReader();
if (file) {
//read img
reader.readAsDataURL(file);
//verify type
var text = file.type;
if (text === "image/png") {
//load img
reader.addEventListener("load", function () {
//put img on <img> src
//console logs
//console.log(preview);
//console.log("pre_nat_height:"+preview.naturalHeight);
// console.log("pre_nat_width:"+preview.naturalWidth);
//technically check if img is 256 x 256
var old = preview.src;
preview.src = reader.result;
if(preview.naturalHeight === 256 && preview.naturalWidth === 256){
//create a hidden input (works but value is not from last img)
var element = document.getElementById("imga");
if(typeof(element) != 'undefined' && element != null){
document.getElementById("imga").remove();
}
input = document.createElement('input');
input.setAttribute("type","hidden");
input.setAttribute("id","imga");
input.setAttribute("name","img")
input.setAttribute("value",preview.src);
document.getElementById('count').appendChild(input);
delete preview;
}
//else if img is not 256 x 256
else {
preview.src = old;
alert("Must be a PNG and have 256px X 256px!");
delete preview;
}
}, false);// i don't know why false but ye
}
}
}
<input type="file" id="file" accept="image/PNG" onchange="importFileandPreview()"><br>
<form id="count">
</form>
叮当猫咪
相关分类