Voglio verificare la trasparenza dell'immagine e visualizzare un messaggio di errore se lo sfondo dell'immagine non è trasparente. Devo function hasAlpha(file)controllare che il file abbia uno sfondo trasparente ma non sono sicuro di come passarlo attraverso la function uploadFile(file)funzione che controlla già la dimensione del file.
Penso di poter duplicare la ifdichiarazione della dimensione del file all'interno di if (xhr.upload) {}e verificare se l'immagine caricata è trasparente ma non sono sicuro di come incorporare il function hasAlpha(file)con il resto del codice.
// 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