Tôi muốn kiểm tra độ trong suốt của hình ảnh và hiển thị thông báo lỗi nếu nền hình ảnh không trong suốt. tôi cófunction hasAlpha(file) để kiểm tra nó, tập tin có nền trong suốt nhưng tôi không chắc làm thế nào để chuyển nó qua function uploadFile(file)chức năng đã kiểm tra kích thước tập tin.
Tôi nghĩ rằng tôi có thể sao chép ifcâu lệnh kích thước tệp bên trong if (xhr.upload) {}và kiểm tra xem hình ảnh được tải lên có trong suốt không nhưng tôi không chắc chắn cách kết hợp function hasAlpha(file)với phần còn lại của mã.
// File Upload
//
function ekUpload() {
function Init() {
console.log("Upload Initialised");
var fileSelect = document.getElementById("file-upload"),
fileDrag = document.getElementById("file-drag"),
submitButton = document.getElementById("submit-button");
fileSelect.addEventListener("change", fileSelectHandler, false);
// Is XHR2 available?
var xhr = new XMLHttpRequest();
if (xhr.upload) {
// File Drop
fileDrag.addEventListener("dragover", fileDragHover, false);
fileDrag.addEventListener("dragleave", fileDragHover, false);
fileDrag.addEventListener("drop", fileSelectHandler, false);
}
}
function fileDragHover(e) {
var fileDrag = document.getElementById("file-drag");
e.stopPropagation();
e.preventDefault();
fileDrag.className =
e.type === "dragover" ? "hover" : "modal-body file-upload";
}
function fileSelectHandler(e) {
// Fetch FileList object
var files = e.target.files || e.dataTransfer.files;
// Cancel event and hover styling
fileDragHover(e);
// Process all File objects
for (var i = 0, f;
(f = files[i]); i++) {
parseFile(f);
uploadFile(f);
}
}
// Output
function output(msg) {
// Response
var m = document.getElementById("messages");
m.innerHTML = msg;
}
function hasAlpha(file) {
var canvas = file.getElementById("file-image");
var ctx = canvas.getContext("2d");
var data = file.getImageData(0, 0, canvas.width, canvas.height).data,
hasAlphaPixels = false;
for (var i = 3, n = data.length; i < n; i += 4) {
if (data[i] < 255) {
hasAlphaPixels = true;
break;
}
}
return hasAlphaPixels;
}
function parseFile(file) {
console.log(file.name);
output("<strong>" + encodeURI(file.name) + "</strong>");
// var fileType = file.type;
// console.log(fileType);
var imageName = file.name;
var isGood = /\.(?=svg|jpg|png|jpeg)/gi.test(imageName);
if (isGood) {
document.getElementById("start").classList.add("hidden");
document.getElementById("response").classList.remove("hidden");
document.getElementById("notimage").classList.add("hidden");
// Thumbnail Preview
document.getElementById("file-image").classList.remove("hidden");
document.getElementById("file-image").src = URL.createObjectURL(file);
} else {
document.getElementById("file-image").classList.add("hidden");
document.getElementById("notimage").classList.remove("hidden");
document.getElementById("start").classList.remove("hidden");
document.getElementById("response").classList.add("hidden");
document.getElementById("file-upload-form").reset();
}
}
function uploadFile(file) {
var xhr = new XMLHttpRequest(),
fileInput = document.getElementById("class-roster-file"),
fileSizeLimit = 1024; // In MB
if (xhr.upload) {
// Check if file is less than x MB
if (file.size <= fileSizeLimit * 1024 * 1024) {
// File received / failed
xhr.onreadystatechange = function(e) {
if (xhr.readyState == 4) {
// Everything is good!
// document.location.reload(true);
}
};
// Start upload
xhr.open(
"POST",
document.getElementById("file-upload-form").action,
true
);
xhr.setRequestHeader("X-File-Name", file.name);
xhr.setRequestHeader("X-File-Size", file.size);
xhr.setRequestHeader("Content-Type", "multipart/form-data");
xhr.send(file);
} else {
output("Please upload a smaller file (< " + fileSizeLimit + " MB).");
}
}
}
// Check for the various File API support.
if (window.File && window.FileList && window.FileReader) {
Init();
} else {
document.getElementById("file-drag").style.display = "none";
}
}
ekUpload();
form {
display: flex;
flex-direction: column;
justify-content: center;
align-items: left;
border: 1px solid;
cursor: pointer;
height: 90px;
}
img {
border: 1px solid;
height: 60px;
width: 60px;
}
.uploader input[type="file"],
.hidden {
display: none;
}
<!-- Upload -->
<form id="file-upload-form" class="uploader">
<input id="file-upload" type="file" name="fileUpload" accept="image/*" />
<label for="file-upload" id="file-drag">
<img id="file-image" src="#" alt="Preview" class="hidden">
<div id="start">
<i class="fa fa-download" aria-hidden="true"></i>
<div>Select a file or drag here</div>
<div id="notimage" class="hidden">Please select an image</div>
</div>
<div id="response" class="hidden">
<div id="messages"></div>
</div>
</label>
</form>
<div class="error hidden">Your logo must have a transparent background. Please set RBGa