Ich möchte die Bildtransparenz überprüfen und eine Fehlermeldung anzeigen, wenn der Bildhintergrund nicht transparent ist. ich habefunction hasAlpha(file) überprüfen, ob die Datei einen transparenten Hintergrund hat, bin mir aber nicht sicher, wie ich sie durch die function uploadFile(file)Funktion leiten soll, die bereits die Dateigröße überprüft.
Ich denke, ich kann die Dateigrößenangabe ifinnerhalb von duplizieren if (xhr.upload) {}und prüfen, ob das hochgeladene Bild transparent ist, aber ich bin nicht sicher, wie ich das function hasAlpha(file)mit dem Rest des Codes integrieren soll.
// 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