{"id":10661,"date":"2026-05-29T09:18:15","date_gmt":"2026-05-29T08:18:15","guid":{"rendered":"https:\/\/anb030.de\/a\/?p=10661"},"modified":"2026-05-29T09:18:15","modified_gmt":"2026-05-29T08:18:15","slug":"mein-webapp-projekt-exifsync-entstanden-aus-einem-problem-das-eigentlich-laengst-geloest-sein-sollte","status":"publish","type":"post","link":"https:\/\/anb030.de\/a\/mein-webapp-projekt-exifsync-entstanden-aus-einem-problem-das-eigentlich-laengst-geloest-sein-sollte\/","title":{"rendered":"Mein WebApp Projekt EXIFsync: Entstanden aus einem Problem, das eigentlich l\u00e4ngst gel\u00f6st sein sollte"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1058\" src=\"https:\/\/anb030.de\/a\/wp-content\/uploads\/2026\/05\/img_4423.jpeg\" alt=\"Titelbild: Meine WebApp \u201eEXIFsync\u201c\" class=\"wp-image-10666\" srcset=\"https:\/\/anb030.de\/a\/wp-content\/uploads\/2026\/05\/img_4423.jpeg 1536w, https:\/\/anb030.de\/a\/wp-content\/uploads\/2026\/05\/img_4423-300x207.jpeg 300w, https:\/\/anb030.de\/a\/wp-content\/uploads\/2026\/05\/img_4423-768x529.jpeg 768w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"has-text-align-left p1 wp-block-paragraph\">EXIFsync ist aus einer simplen Frustration heraus entstanden. Ich fotografiere hobbym\u00e4\u00dfig viel mit dem iPhone und verschiedenen Kameras. Irgendwann kam wieder genau dieselbe Situation auf: Ich wollte ein Bild einer Kamera ohne GPS-Modul oder mit unvollst\u00e4ndigen Metadaten bearbeiten oder exportieren, bei dem die urspr\u00fcnglichen EXIF-Daten fehlten oder unvollst\u00e4ndig waren. Gleichzeitig gab es bisher kaum eine einfache mobile L\u00f6sung, um z. B. auf Reisen die vollst\u00e4ndigen Metadaten eines iPhone-Quellfotos \u2013 etwa Standort, Aufnahmezeit oder Kamerainformationen \u2013 sauber und (fast) verlustfrei auf ein anderes Bild desselben Motivs oder Ortes zu \u00fcbertragen. Also suchte ich nach einer App, die genau das leisten kann. \u00dcberraschenderweise gab es im App Store kaum wirklich \u00fcberzeugende L\u00f6sungen. Viele Apps wirkten \u00fcberladen, technisch und designm\u00e4\u00dfig veraltet oder versteckten grundlegende Funktionen hinter fragw\u00fcrdigen In-App-K\u00e4ufen. Manche konnten nur sehr umst\u00e4ndlich Metadaten \u00fcbertragen, andere arbeiteten extrem intransparent oder schickten Bilder direkt \u00fcber irgendwelche Server. Irgendwann war der Punkt erreicht, an dem ich mir dachte: \u201eDas muss doch eigentlich besser gehen.\u201c <\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"has-text-align-left p1 wp-block-paragraph\">So begann EXIFsync als kleines HTML5-Experiment ohne gro\u00dfe Erwartungen. Mit der Zeit wurde daraus jedoch ein immer ambitionierteres Projekt. Vor allem, weil schnell klar wurde, wie kompliziert viele Dinge im mobilen Browser tats\u00e4chlich sind: iPhone Safari, Speicherlimits, Canvas-Probleme, EXIF-Rotation, HEIC-Unterst\u00fctzung oder eine stabile Bildverarbeitung ohne Qualit\u00e4tsverlust sind deutlich schwieriger umzusetzen als gedacht. Genau dieser technische Reiz lie\u00df das Projekt aber mit der Zeit immer weiter wachsen. Und ja, ganz ehrlich: Ohne die moderne KI-Unterst\u00fctzung h\u00e4tte manches deutlich l\u00e4nger gedauert oder ich h\u00e4tte meine Zielidee nie erreicht. Viele Ideen, L\u00f6sungsans\u00e4tze und einzelne Code-Snippets sind im Zusammenspiel aus eigenem Hirnschmalz, viel Experimentieren und einer Prise \u201eVibe Coding\u201c entstanden. Trotzdem steckt hinter EXIFsync sehr viel eigene Detailarbeit, unz\u00e4hlige Safari-Tests und vor allem der Anspruch, eine L\u00f6sung zu entwickeln, die sich nicht wie ein typisches Browser-Tool, sondern eher wie eine moderne native App f\u00fcr Smartphones wie das iPhone anf\u00fchlt.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/anb030.de\/a\/wp-content\/uploads\/2026\/05\/img_4461.jpeg\" alt=\"\" class=\"wp-image-10677\" srcset=\"https:\/\/anb030.de\/a\/wp-content\/uploads\/2026\/05\/img_4461.jpeg 1024w, https:\/\/anb030.de\/a\/wp-content\/uploads\/2026\/05\/img_4461-300x225.jpeg 300w, https:\/\/anb030.de\/a\/wp-content\/uploads\/2026\/05\/img_4461-768x576.jpeg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Design, Icon &amp; Benutzererlebnis<\/h2>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph\">Die Benutzeroberfl\u00e4che von <strong><a href=\"https:\/\/anb030.de\/app.exif\/\">EXIFsync<\/a><\/strong> wurde von mir konsequent nach dem Mobile-First-Prinzip gestaltet und so gut wie m\u00f6glich auf die WebKit-Engine f\u00fcr den Apple Safari-Browser abgestimmt. Anstelle verschachtelter Men\u00fcs setzt die WebApp auf einen klaren Workflow: Quellbild laden, Zielbild ausw\u00e4hlen, EXIF \u00fcbertragen \u2013 fertig. Gro\u00dfe Touch-Fl\u00e4chen, interaktive Voransichten, subtile Animationen und haptische Feedback sorgen daf\u00fcr, dass die App sich eher wie eine native iOS-Anwendung anf\u00fchlt als wie ein typisches Browser-Tool.<\/p>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph\">Auch gestalterisch wurde jedes Element bewusst reduziert gehalten. Das dunkle Interface orientiert sich am modernen iOS-Dark-Mode-Stil und legt den Fokus auf die eigentlichen Bildinformationen. Das EXIFsync-Icon verbindet die Symbolik von Kamera, Film und Metadaten zu einer leicht futuristischen, technischen Formsprache. Im Design vereint es die sanften Schatten des Neumorphismus, die vertrauten Texturen des Skeuomorphismus und die flie\u00dfende Eleganz von Liquid Glass.&nbsp;Abgerundet wird das Ganze durch responsive Bildschirm-Layouts von klein bis gro\u00df, optimierte modale Ansichten, sauberes Scroll-Verhalten und eine klare Typografie, die eine m\u00f6glichst direkte und angenehme Bedienung erm\u00f6glichen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-left\">Technik, DSGVO &amp; Bildpipeline<\/h2>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph\"><strong><a href=\"https:\/\/anb030.de\/app.exif\/\">EXIFsync<\/a><\/strong> arbeitet vollst\u00e4ndig lokal in deinem Browser \u2013 ohne Cloud und externe Server, nat\u00fcrlich DSGVO-konform. S\u00e4mtliche Daten bleiben zu 100 % auf deinem Ger\u00e4t. Die Anwendung funktioniert sogar vollst\u00e4ndig offline als Web-App auf deinem Home-Bildschirm. Das Herzst\u00fcck der Web-App ist eine bin\u00e4re APP1-Preservation-Pipeline. Dabei wird der originale EXIF-Block des Quellbildes exakt extrahiert und unver\u00e4ndert in das Zielbild eingebettet. So bleiben Kamera- und Objektivdaten, Belichtungswerte, GPS-Koordinaten sowie das Datum und die Uhrzeit der Aufnahme vollst\u00e4ndig erhalten.<\/p>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph\">Unterst\u00fctzt werden die Formate JPEG, PNG, WEBP, HEIC und HEIF. Der finale Export erfolgt als hochwertiges JPEG mit bis zu 12 Megapixeln. Technisch betrachtet setzt EXIFsync mit der 12-MP-Grenze aktuell so ziemlich das Ma\u00df der Dinge. Dies ist modernen Browser-Technologien wie createImageBitmap-Decoding f\u00fcr eine fl\u00fcssigere Bildverarbeitung, progressives Downscaling f\u00fcr eine bessere Sch\u00e4rfe, Display-P3-Unterst\u00fctzung auf kompatiblen Ger\u00e4ten sowie Web-Worker-basiertes EXIF-Parsing im Hintergrund zu verdanken. Erg\u00e4nzt wird das Ganze durch automatische EXIF-Orientierungsnormalisierung und aggressives Memory-Cleanup speziell f\u00fcr die Apple Safari WebKit-Engine.<\/p>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph\">Trotz der technisch anspruchsvollen Pipeline bleibt die Grundidee von EXIFsync bewusst simpel \u2013 bei einer Gesamtgr\u00f6\u00dfe von gerade mal rund 200 Kilobyte: eine schnelle, transparente und kompromisslos lokale L\u00f6sung f\u00fcr ein Problem, das eigentlich schon l\u00e4ngst besser gel\u00f6st sein m\u00fcsste.<\/p>\n\n\n<figure class=\"klnd-bild-wrapper aligncenter\"><a href=\"https:\/\/anb030.de\/app.exif\/\" class=\"klnd-bild-link\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/anb030.de\/a\/wp-content\/uploads\/2026\/05\/app-icon-2-150x150.jpeg\" class=\"klnd-bild aligncenter\" alt=\"Zur WebApp: EXIFsync\" srcset=\"https:\/\/anb030.de\/a\/wp-content\/uploads\/2026\/05\/app-icon-2-150x150.jpeg 150w, https:\/\/anb030.de\/a\/wp-content\/uploads\/2026\/05\/app-icon-2-300x300.jpeg 300w, https:\/\/anb030.de\/a\/wp-content\/uploads\/2026\/05\/app-icon-2.jpeg 512w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a><\/figure>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph\">\u24d8 Falls ihr nun neugierig auf meine anderen WebApp-Projekte seid, findet ihr <strong><a href=\"https:\/\/anb030.de\/a\/menue\/webapps\/\">hier<\/a><\/strong> weiteren Stoff zum Ausprobieren und Testen. Vielleicht ist ja auch etwas f\u00fcr euch dabei.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph\">Ich bin ein \u201eEin-Personen-Betrieb\u201c, arbeite hauptberuflich im Gesundheitswesen und betreibe diese Seite als Hobbyprojekt in meiner Freizeit. Wenn Ihnen meine Arbeit gef\u00e4llt (die Beitr\u00e4ge, die Hintergrundbilder, mein allgemeines Auftreten \u2026 einfach alles), so d\u00fcrfen Sie gerne in Erw\u00e4gung ziehen, mir eine kleine Spende f\u00fcr zum Beispiel einen Caf\u00e9 \u2615\ufe0f per&nbsp;<strong><a href=\"https:\/\/www.paypal.com\/donate\/?hosted_button_id=TDP5X7EJD4SPQ\" target=\"_blank\" rel=\"noreferrer noopener\">PayPal.com<\/a><\/strong>&nbsp;zukommen zu lassen! Ihre Beteiligung ist unglaublich wertvoll und tr\u00e4gt viel zur Unterst\u00fctzung und Erhalt dieser werbefreien Seite bei!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-background wp-element-button\" href=\"https:\/\/www.paypal.com\/donate\/?hosted_button_id=TDP5X7EJD4SPQ\" style=\"border-radius:10px;background-color:#00b0ba\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" src=\"https:\/\/anb030.de\/dl\/32paypal.png\" alt=\"PayPal Logo\" style=\"height: 24px; vertical-align: middle; margin-right: 5px\" \/> Unterst\u00fctzen<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div style=\"text-align: center;\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/anb030.de\/a\/wp-content\/uploads\/2021\/04\/img_5369.png\" alt=\"Author Bild\" width=\"60\" height=\"60\" style=\"object-fit: cover;\" \/>\n  <p style=\"margin-top: 8px;\"> Andr\u00e9 K. ist der Autor dieses Blogartikels. <\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>EXIFsync ist aus einer simplen Frustration heraus entstanden. Ich fotografiere hobbym\u00e4\u00dfig viel mit dem iPhone und verschiedenen Kameras. Irgendwann kam wieder genau dieselbe Situation auf: Ich wollte ein Bild einer Kamera ohne GPS-Modul oder mit unvollst\u00e4ndigen Metadaten bearbeiten oder exportieren, bei dem die urspr\u00fcnglichen EXIF-Daten fehlten oder unvollst\u00e4ndig waren. Gleichzeitig gab es bisher kaum eine [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[488,387],"tags":[392,416,455,388,390,389,394,391,456],"class_list":["post-10661","post","type-post","status-publish","format-standard","hentry","category-ipad","category-iphone_ios","tag-app","tag-apple","tag-fotografie","tag-ios","tag-ipad","tag-iphone","tag-pictures","tag-safari","tag-webapp","gallery-content-unit"],"_links":{"self":[{"href":"https:\/\/anb030.de\/a\/wp-json\/wp\/v2\/posts\/10661","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/anb030.de\/a\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/anb030.de\/a\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/anb030.de\/a\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/anb030.de\/a\/wp-json\/wp\/v2\/comments?post=10661"}],"version-history":[{"count":16,"href":"https:\/\/anb030.de\/a\/wp-json\/wp\/v2\/posts\/10661\/revisions"}],"predecessor-version":[{"id":10681,"href":"https:\/\/anb030.de\/a\/wp-json\/wp\/v2\/posts\/10661\/revisions\/10681"}],"wp:attachment":[{"href":"https:\/\/anb030.de\/a\/wp-json\/wp\/v2\/media?parent=10661"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/anb030.de\/a\/wp-json\/wp\/v2\/categories?post=10661"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/anb030.de\/a\/wp-json\/wp\/v2\/tags?post=10661"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}