Notice: Undefined variable: root in /users/basti1012/www/index1.php on line 41
exif Daten von Bildern auslesen

exif Daten von Bildern auslesen

Hiermit können sie alle EXIF Daten auslesen, die angegeben sind. Auch die Geodaten des Bildes

Der hier verwendete Code

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- <link rel="stylesheet" href="https://unpkg.com/boxicons@2.0.9/css/boxicons.min.css"> --> <style> ::-webkit-scrollbar { width: 10px; transition: .5s; } ::-webkit-scrollbar-track { background: transparent; border-radius: 10px; } ::-webkit-scrollbar-thumb { background: #4d4d4d; transition: .5s; border-radius: 10px; } ::-webkit-scrollbar-thumb:hover { background: black; } *,::before,::after{ box-sizing: border-box; } body { background: whitesmoke; font-family: 'Open Sans', sans-serif; margin: 0; } h1 { font-size: 21px; text-align: center; margin: 20px 0 20px; } h2 { font-size: 19px; text-align: center; margin: 20px 0 20px; color: grey; } h1 small { display: block; font-size: 15px; padding-top: 8px; color: gray; } a{ appearance: unset; border: unset; text-decoration: unset; } #imageUpload { display: none; } label { display: inline-block; cursor: pointer; transition: all 0.2s ease-in-out; color: black; } label:hover::after { opacity: 1; } label::after { content: ""; display: block; padding-top: 3px; border-bottom: 3px solid black; transition: opacity .5s ease; opacity: 0; } .avatar-preview { width: 50px; height: 50px; position: relative; border-radius: 25%; border: 6px solid #ffffff; box-shadow: 0px 2px 4px 0px rgb(0 0 0 / 10%); display: inline-block; } .avatar-preview > div { width: 100%; height: 100%; border-radius: 25%; background-size: cover; background-repeat: no-repeat; background-position: center; } .fadein { opacity: 1 !important; transition: .5s; } .main_con{ display: flex; align-items: center; width: 100%; height: 100%; position: fixed; } .first_con{ width: 100%; max-width: 700px; background-color: white; border-radius: 25px; border: 3px solid black; margin: 0 auto; padding: 40px; } .drag_box{ width: 90%; height: 250px; margin-left: 5%; background-color: whitesmoke; border-radius: 25px; margin-top: 35px; border: 3px dashed black; text-align: center; } .upload_icon{ font-size: 7rem; padding-top: 35px; } .uploaded_box{ margin-top: 50px; } .card_con{ max-height: 250px; overflow-y: auto; } .uploaded_card{ width: 90%; margin-left: 5%; margin-top: 35px; margin-bottom: 35px; border-radius: 25px; background-color: whitesmoke; text-align: left; padding: 25px; display: flex; position: relative; border: 3px solid black; } .img_values{ display: inline-block; vertical-align: super; margin-left: 15px; width: calc(100% - 150px); margin-right: 50px; } .title { font-size: 19px; margin-top: 5px; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } .cancel_card{ display: flex; background: white; padding: 10px; border-radius: 10px; position: absolute; right: 25px; top: 32px; border: 3px solid black; cursor: pointer; transition: .5s; } .cancel_card:hover{ background-color: black; color: white; } .button { background-color: #2b272f; padding: 20px 30px; font-size: 19px; text-align: center; cursor: pointer; border: none; text-decoration: none; border-radius: 5px; color: white; border: 3px solid transparent; transition: .5s; border-radius: 15px; margin: 35px; margin-top: 25px; margin-bottom: unset; } .button:hover { border: 3px solid #000000; background: black; } .analyse_active{ border: 3px solid #000000; background: black; } .dimmer{ position: fixed; background-color: #212025c9; height: 100%; width: 100%; z-index: 100; display: none; align-items: center; } .popup{ background: white; width: 50%; margin: 0 auto; border-radius: 20px; border: 3px solid black; padding: 25px; max-width: 800px; } .popup_letters_con{ height: 200px; display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: center; margin-bottom: 80px; } .popup .subtitle { margin: unset; padding: 50px; padding-bottom: unset; } .popup .text { padding: 50px; margin: unset; padding-top: 5px; } .spinner { -webkit-animation: rotator 1.4s linear infinite; animation: rotator 1.4s linear infinite; width: 30px; height: 30px; } .path { stroke-dasharray: 187; stroke-dashoffset: 0; transform-origin: center; -webkit-animation: dash 1.4s ease-in-out infinite, colors 5.6s ease-in-out infinite; animation: dash 1.4s ease-in-out infinite, colors 5.6s ease-in-out infinite; } @-webkit-keyframes rotator { 0% { transform: rotate(0deg); } 100% { transform: rotate(270deg); } } @keyframes rotator { 0% { transform: rotate(0deg); } 100% { transform: rotate(270deg); } } @-webkit-keyframes colors { 0% { stroke: white; } 25% { stroke: white; } 50% { stroke: white; } 75% { stroke: white; } 100% { stroke: white; } } @keyframes colors { 0% { stroke: white; } 25% { stroke: white; } 50% { stroke: white; } 75% { stroke: white; } 100% { stroke: white; } } @-webkit-keyframes dash { 0% { stroke-dashoffset: 187; } 50% { stroke-dashoffset: 46.75; transform: rotate(135deg); } 100% { stroke-dashoffset: 187; transform: rotate(450deg); } } @keyframes dash { 0% { stroke-dashoffset: 187; } 50% { stroke-dashoffset: 46.75; transform: rotate(135deg); } 100% { stroke-dashoffset: 187; transform: rotate(450deg); } } .second_con{ width: 80%; background-color: white; border-radius: 25px; border: 3px solid black; margin: 0 auto; padding: 40px; height: 80%; display: none; position: relative; } .second_img_con{ width: calc(100% - 575px); height: 100%; border-radius: 25px; background-size: cover; background-repeat: no-repeat; background-position: center; } .second_data_con{ background: whitesmoke; width: 550px; border-radius: 25px; margin-left: 25px; padding: 50px; overflow: auto; } .second_mini_cons{ display: flex; height: 100%; width: 100%; } #second_data_title { font-size: 25px; font-weight: bold; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } #second_data_sub_title { font-size: 19px; margin-top: 5px; } pre { font-family: inherit; margin-left: 20px; } .info_cons { background: white; margin-top: 20px; border: 2px solid black; border-radius: 15px; } .info_con_title { font-size: 21px; padding: 20px 20px 20px; font-weight: bold; border-bottom: 2px solid; background: white; border-radius: 11px; display: flex; justify-content: space-between; align-items: center; } .dropdown_icon{ padding-left: 5px; padding-right: 5px; border: 2px solid black; border-radius: 5px; padding-top: 3px; transition: .5s; cursor: pointer; } .dropdown_icon:hover{ background-color: black; color: white; } .display_none{ display: none; } .direction_buttons{ top: 12px; position: absolute; right: 35px; } .next, .prev, .back{ border: 2px solid black; border-radius: 5px; transition: .5s; cursor: pointer; margin: 5px; position: absolute; padding: 15px; font-size: 25px; background: white; } .next:hover, .prev:hover, .back:hover{ background-color: black; color: white; } .next{ right: 2%; } .prev{ left: 2%; } .back{ left: 2%; top:50px; } .link_box{ height: 100px; display: flex; } input { font-size: 1.2rem; border-radius: 5px; color: black; padding: 25px; border: 3px dashed #000000; transition: .5s; display: inline-block; background: whitesmoke; border-radius: 15px; margin-left: 30px; width: 84%; } input:focus{ border: 3px solid #000000; } @media screen and (max-width: 1300px) { .main_con{ position: unset; margin-top: 150px; } .second_con{ height: unset; overflow: auto; border: none; width: 100%; } .second_mini_cons{ flex-direction: column; } .second_img_con{ width: 100%; height: 500px; } .second_data_con{ width: unset; margin-left: unset; overflow: unset; margin-top: 50px; } .back { left: 40px; } .prev { left: unset; right: 120px; } .next { right: 40px; } .next, .prev, .back{ z-index: 455; top: 25px; } } @media screen and (max-width: 760px) { .first_con{ width: 90%; } h2{ padding-left: 25px; padding-right: 25px; padding-bottom: 25px; } .drag_box{ height: unset; } } @media screen and (max-width: 600px) { .first_con{ width:100%; max-width:unset; height: 100vh; border: unset; padding-top: 50px; overflow: auto; margin-top: -150px; } .drag_box{ width: 98%; height: unset; margin-left: unset; } .button{ margin: unset; } .card_con{ max-height: unset; overflow: unset; } .uploaded_card { width: 100%; margin-left: unset; } pre { font-size: 15px; overflow-x: hidden; margin-right: 15px; } .second_data_con{ padding: 10px; background-color: unset; } .second_con{ padding: 20px; } } </style> <link href='/css_webseite/boxicons.min.css' rel='stylesheet'> --> <script src="/js_webseite/exif.js"></script> <title>Find Exif Data</title> </head> <body ondrop="dropHandler(event);" ondragover="dragOverHandler(event);"> <div class="dimmer" id="dimmer"> <div class="popup" id="popup"> <h1>Error <small>Please attach a file before analysing it!</small> <div class="button" onclick="letter_index_close()">OK</div> </div> </div> <div class="main_con"> <div class="back display_none" id="back" onclick="backReview()"><i class='bx bx-arrow-back' ></i></div> <div class="prev display_none" id="prev" onclick="previousReview()"><i class='bx bx-chevron-left'></i></div> <div class="next display_none" id="next" onclick="nextReview()"><i class='bx bx-chevron-right'></i></div> <div class="first_con" id='first_con'> <h1>Find an Image's Exif Data <small>By Abdirazak Hassan</small></h1> <div class="drag_box"> <i class='bx bx-cloud-upload upload_icon'></i> <h2>Drag and Drop or <label for="imageUpload">Browse</label> to choose a file.</h2> <input type='file' id="imageUpload" onchange="readURL(this);" accept=".png, .jpg, .jpeg, .gif" multiple/> </div> <!-- <h2 style="text-align:left; margin-left:35px; margin-top: 25px;"><label for="">Or Paste Link</label> of image below and hit enter to upload.</h2> <input type="text" onchange="link_upload(this)" placeholder="eg: https://www.google.com"> --> <div class="uploaded_box" id="uploaded_box"> </div> <div class="button analyse" id='analyse_button' onclick="analyse()">Analyse</div> </div> <div class="second_con" id="second_con"></div> </div> </div> </body> <script> var id; img_array = [] var counter = 0 let rev = 0; function readURL(input) { if (input.files) { Object.keys(input.files).forEach(i => { const file = input.files[i]; var reader = new FileReader(); reader.onload = function(e) { img_array.push([counter,e.target.result,file]); counter = counter + 1 image = 'url('+e.target.result +')'; image_name = file.name; image_size = file.size; image_size = formatBytes(image_size) if(!check_if_cards_exists()){ document.getElementById('uploaded_box').innerHTML = '<h1>Uploaded Image</h1><div class="card_con" id="card_con"></div>' generate_card(image, image_name, image_size) } else{ generate_card(image, image_name, image_size) } } reader.readAsDataURL(file); }) } else if (input) { var reader = new FileReader(); reader.onload = function(e) { img_array.push([counter,e.target.result,input]); counter = counter + 1 image = 'url('+e.target.result +')'; image_name = input.name; image_size = input.size; image_size = formatBytes(image_size) if(!check_if_cards_exists()){ document.getElementById('uploaded_box').innerHTML = '<h1>Uploaded Image</h1><div class="card_con" id="card_con"></div>' generate_card(image, image_name, image_size) } else{ generate_card(image, image_name, image_size) } } reader.readAsDataURL(input); } } function generate_card(image, image_name, image_size){ document.getElementById('card_con').innerHTML += '<div class="uploaded_card" id='+ counter +'> <div class="avatar-preview"><div id="imagePreview" class="fadein" style="background-image:'+ image +';"></div></div><div class="img_values"><div class="title">'+image_name+'</div><small>'+ image_size+'</small></div><div class="cancel_card" onclick = "delete_card(this)"><i class="bx bx-x" ></i></div></div>' avatar_preview = document.getElementsByClassName('avatar-preview') for (let i = 0; i < avatar_preview.length; i++) { avatar_preview[i].style.opacity = '0'; setTimeout(function(){avatar_preview[i].classList.add("fadein")}, 200); } } function formatBytes(bytes, decimals = 2) { if (bytes === 0) return '0 Bytes'; const k = 1024; const dm = decimals < 0 ? 0 : decimals; const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; } function delete_card(that){ id = that.parentNode.id - 1 img_array.forEach(delete_card_from_array) that.parentNode.remove() if(!check_if_cards_exists()){ document.getElementById('uploaded_box').innerHTML = '' } } function delete_card_from_array(item,arr){ if(item[0] == id){ img_array.splice(arr,1) return true } } function check_if_cards_exists(){ if(document.getElementsByClassName('uploaded_card').length !== 0){ return true; } else{ return false; } } function dragOverHandler(ev) { ev.preventDefault(); } function dropHandler(ev) { ev.preventDefault(); if (ev.dataTransfer.items) { [...ev.dataTransfer.items].forEach((item) => { if (item.kind === 'file') { const file = item.getAsFile(); readURL(file) } }); } } function analyse(){ document.getElementById('analyse_button').classList.add('analyse_active') document.getElementById('analyse_button').innerHTML = '<svg class="spinner" width="65px" height="65px" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"><circle class="path" fill="none" stroke-width="6" stroke-linecap="round" cx="33" cy="33" r="30"></circle></svg>' setTimeout(function() { if(check_if_cards_exists()){ cancel_button = document.getElementsByClassName('cancel_card') for (let i = 0; i < cancel_button.length; i++) { cancel_button[i].remove() } document.getElementById('first_con').style.display = 'none'; document.getElementById('second_con').style.display = 'block'; document.getElementById('back').classList.remove('display_none') if(img_array.length > 1){ show_buttons() } for (let i = 0; i < img_array.length; i++) { exif_this = getExif(img_array[i][1]) exif_data = EXIF.pretty(exif_this); if(exif_data == ''){ exif_data = 'No Exif Data Found.' my_location = '' } else{ exif_data = exif_data.split(/[,]+/); my_location = get_location(exif_this) if(!my_location == ''){ my_location = '<div class="info_cons"><div class="info_con_title">GPS Location<div class="dropdown_icon" onclick="dropdown_toggle(this)"><i class="bx bx-chevron-down"></i></div></div><pre id="allMetaDataSpan">' + 'Latitude: ' + my_location[0] + '<br>' + 'Latitude Degree: '+ my_location[1] + '<br>' + 'Latitude Minutes: ' + my_location[2] + '<br>' + 'Latitude Seconds: ' + my_location[3] + '<br>' + '<br>' + 'Longtitude: ' + my_location[4] + '<br>' + 'Longtitude Degree: ' + my_location[5] + '<br>' + 'Longtitude Minutes: ' + my_location[6] + '<br>' + 'Longtitude Seconds: ' + my_location[7] + '<br>'+ '</pre>'+ my_location[8] +'<div class="button" style="margin:25px" >Google Maps</div></a></div>' } } document.getElementById('second_con').innerHTML += '<div class="second_mini_cons"><div class="second_img_con" style="background-image: url('+ img_array[i][1] +')"></div><div class="second_data_con"><div id="second_data_title">' + img_array[i][2].name + '</div><div id="second_data_sub_title">' + 'Last modified: '+ normal_date(img_array[i][2].lastModified) + '</div>' + '<div class="info_cons"><div class="info_con_title">General Information<div class="dropdown_icon" onclick="dropdown_toggle(this)"><i class="bx bx-chevron-down"></i></div></div><pre id="allMetaDataSpan">' + 'Image size: ' + formatBytes(img_array[i][2].size) + '<br>' + 'Image type: '+ img_array[i][2].type + '</pre></div>'+'<div class="info_cons"><div class="info_con_title">Exif Data<div class="dropdown_icon" onclick="dropdown_toggle(this)"><i class="bx bx-chevron-down"></i></div></div><pre id="allMetaDataSpan">' + exif_data + '</pre></div>' + my_location +'</div></div>' carousel(rev); } } else{ letter_index_open('Error', 'Please attach a file before analysing it!') } }, 1000); } function getExif(value) { var data; var img2 = new Image(); img2.src = value; EXIF.getData(img2, function() { data = this; }); return data } function letter_index_open(type, message, cta = 'OK'){ document.getElementById('popup').innerHTML = '<h1>'+ type +'<small>' + message + '</small><div class="button" onclick="letter_index_close()">'+ cta +'</div>' document.getElementById('dimmer').style.display = 'flex'; } function letter_index_close(){ document.getElementById('dimmer').style.display = 'none'; document.getElementById('analyse_button').classList.remove('analyse_active') document.getElementById('analyse_button').innerHTML = 'Analyse' } function get_location(myData){ if(myData.exifdata.GPSLatitude || myData.exifdata.GPSLongitude){ var latDegree_nom = myData.exifdata.GPSLatitude[0].numerator; var latDegree_denom = myData.exifdata.GPSLatitude[0].denominator; var latDegree = latDegree_nom / latDegree_denom; var latMinute_nom = myData.exifdata.GPSLatitude[1].numerator; var latMinute_denom = myData.exifdata.GPSLatitude[1].denominator; var latMinute = latMinute_nom / latMinute_denom var latSecond_nom = myData.exifdata.GPSLatitude[2].numerator; var latSecond_denom = myData.exifdata.GPSLatitude[2].denominator; var latSecond = latSecond_nom / latSecond_denom var latDirection = myData.exifdata.GPSLatitudeRef; var latFinal = ConvertDMSToDD(latDegree, latMinute, latSecond, latDirection); var lonDegree_nom = myData.exifdata.GPSLongitude[0].numerator; var lonDegree_denom = myData.exifdata.GPSLongitude[0].denominator; var lonDegree = lonDegree_nom / lonDegree_denom; var lonMinute_nom = myData.exifdata.GPSLongitude[1].numerator; var lonMinute_denom = myData.exifdata.GPSLongitude[1].denominator; var lonMinute = lonMinute_nom / lonMinute_denom var lonSecond_nom = myData.exifdata.GPSLongitude[2].numerator; var lonSecond_denom = myData.exifdata.GPSLongitude[2].denominator; var lonSecond = lonSecond_nom / lonSecond_denom var lonDirection = myData.exifdata.GPSLongitudeRef; var lonFinal = ConvertDMSToDD(lonDegree, lonMinute, lonSecond, lonDirection); var link = '<a href="http://www.google.com/maps/place/'+latFinal+','+lonFinal+'" target="_blank">' return [latFinal, latDegree, latMinute, latSecond, lonFinal, lonDegree, lonMinute, lonSecond, link]; } else{ return '' } } function ConvertDMSToDD(degrees, minutes, seconds, direction) { var dd = degrees + (minutes/60) + (seconds/3600); if (direction == "S" || direction == "W") { dd = dd * -1; } return dd; } function dropdown_toggle(that){ that.parentNode.nextElementSibling.classList.toggle('display_none') if(that.firstElementChild.classList.contains('bx-chevron-down')){ that.firstElementChild.classList.toggle('bx-chevron-up') } else{ that.firstElementChild.classList.toggle('bx-chevron-down') } } function normal_date(val){ const milliseconds = val// 1575909015000 const dateObject = new Date(milliseconds) const humanDateFormat = dateObject.toLocaleString() //2019-12-9 10:30:15 dateObject.toLocaleString("en-US", {weekday: "long"}) // Monday dateObject.toLocaleString("en-US", {month: "long"}) // December dateObject.toLocaleString("en-US", {day: "numeric"}) // 9 dateObject.toLocaleString("en-US", {year: "numeric"}) // 2019 dateObject.toLocaleString("en-US", {hour: "numeric"}) // 10 AM dateObject.toLocaleString("en-US", {minute: "numeric"}) // 30 dateObject.toLocaleString("en-US", {second: "numeric"}) // 15 dateObject.toLocaleString("en-US", {timeZoneName: "short"}) // 12/9/2019, 10:30:15 AM CST return humanDateFormat } function show_buttons(){ document.getElementById('next').classList.remove('display_none') document.getElementById('prev').classList.remove('display_none') } function previousReview() { rev = rev - 1; carousel(rev); } function nextReview() { rev = rev + 1; carousel(rev); } function backReview() { window.location.reload(); } function carousel(review) { let reviews = document.getElementsByClassName("second_mini_cons"); if (review >= reviews.length) { review = 0; rev = 0; } if (review < 0) { review = reviews.length - 1; rev = reviews.length - 1; } for (let i = 0; i < reviews.length; i++) { reviews[i].style.display = "none"; } reviews[review].style.display = "flex"; } // No CORS wont let this work! // function link_upload(that){ // isvalid = validURL(that.value) // if(isvalid){ // var img2 = new Image(); // img2.src = that.value; // fetch(that.value) // .then(function (response) { // return response.blob(); // }) // .then(function (blob) { // readURL(blob) // }); // } // else{ // letter_index_open('Error', 'Please upload a valid URL. eg: https://www.google.com') // } // } // function validURL(str) { // var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol // '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name // '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address // '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // port and path // '(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string // '(\\#[-a-z\\d_]*)?$','i'); // fragment locator // return pattern.test(str); // } </script> <!-- <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&amp;sensor=false"></script> <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBK73HewkhHBVVs9nI98-HY_N7cZM_kdjE"></script>--> </html>