Dynamische Bildergalerie

Anwendungen für Webseiten. Künstliche Intelligenz verwenden.
Volker
Moderator
Moderator
Beiträge: 1690
Registriert: Sa 12. Dez 2020, 22:35

Dynamische Bildergalerie

Ungelesener Beitrag von Volker »

Moin :D

Hab es mal als extra Thema hier neu gemacht.

Meine neuste Entwicklung



Hier die Codes die Ihr braucht:

HTML Block:

Code: Alles auswählen

<section data-bs-version="5.1" class="content-gallery" group="Content" mbr-style="{
    'padding-top': paddingTop + 'rem',
    'padding-bottom': paddingBottom + 'rem',
    'background-color': bgColor,
    '--btnColor': btnColor
  }" data-thumbsize="{{thumbSize}}" data-perrow="{{perRow}}" data-maximages="{{maxImages}}">

  <mbr-parameters>
    <header>Abstände</header>
    <input type="range" inline title="Abstand oben" name="paddingTop" min="0" max="10" step="1" value="6">
    <input type="range" inline title="Abstand unten" name="paddingBottom" min="0" max="10" step="1" value="6">

    <header>Galerie-Einstellungen</header>
    <input type="range" title="Größe der Vorschaubilder (px)" name="thumbSize" min="80" max="240" step="10" value="210">
    <input type="range" title="Bilder pro Reihe" name="perRow" min="2" max="10" step="1" value="5">
    <input type="range" title="Bilder pro Seite" name="maxImages" min="1" max="50" step="1" value="10">

    <header>Farben</header>
    <input type="color" title="Hintergrundfarbe" name="bgColor" value="#000000">
    <input type="color" title="Buttonfarbe (Ordner)" name="btnColor" value="#ffa600">

    <header>Inhalt</header>
    <input type="text" title="Titel" name="title" value="Unsere Foto-Galerien">
    <textarea title="Beschreibung" name="text">Klicke auf ein Thema, um die Fotos anzuzeigen.</textarea>
  </mbr-parameters>

  <div class="container text-center">
    <h3 class="mbr-section-title mbr-fonts-style mb-3" mbr-theme-style="display-5">Dynamische Bilder Galerie</h3>
    <p class="mbr-text mbr-fonts-style mb-4" mbr-theme-style="display-7">Bilder werden einfach aus Ordnern eingelesen</p>

    <div id="galleryButtons" class="mb-4 d-flex flex-wrap justify-content-center gap-2"></div>
    <h5 id="currentGalleryTitle" class="text-center mb-4 text-muted"></h5>

    <div id="galleryGrid" class="gallery-grid"></div>

    <!-- Pagination -->
    <div id="pagination" class="mt-4 d-flex justify-content-center flex-wrap gap-1">
      <button id="prevPage" class="btn btn-outline-primary m-1">Zurück</button>
      <div id="pageNumbers" class="d-flex flex-wrap justify-content-center"></div>
      <button id="nextPage" class="btn btn-outline-primary m-1">Weiter</button>
    </div>
  </div>

  <!-- Lightbox -->
  <div id="lightbox-gallery" class="lightbox">
    <span class="close" onclick="closeGallery()">×</span>
    <div class="lightbox-content">
      <img class="lightbox-image" id="lightbox-image" src alt>
      <a class="prev" onclick="changeSlide(-1)">❮</a>
      <a class="next" onclick="changeSlide(1)">❯</a>
    </div>
  </div>

  <script>
    let galleryImages = [], currentSlide = 0, currentPage = 1, totalPages = 1;

    async function loadGalleries() {
      const res = await fetch('galerien/');
      const text = await res.text();
      const doc = new DOMParser().parseFromString(text, 'text/html');
      const folders = [...doc.querySelectorAll('a')]
        .map(a => a.getAttribute('href'))
        .filter(h => h && h.endsWith('/') && !h.includes('../') && !h.toLowerCase().includes('blogblock'))
        .map(h => h.replace('/', ''));

      const btns = document.getElementById('galleryButtons');
      btns.innerHTML = '';

      folders.forEach(f => {
        const b = document.createElement('button');
        b.className = 'btn m-1 gal-btn';
        b.textContent = f.charAt(0).toUpperCase() + f.slice(1);
        b.onclick = () => loadFolder(f);
        btns.appendChild(b);
      });

      if (folders.length) loadFolder(folders[0]);
    }

    async function loadFolder(folder) {
      const res = await fetch('galerien/' + folder + '/');
      const text = await res.text();
      const doc = new DOMParser().parseFromString(text, 'text/html');
      galleryImages = [...doc.querySelectorAll('a')]
        .map(a => a.getAttribute('href'))
        .filter(h => h && h.match(/\.(jpg|jpeg|png|gif|webp)$/i))
        .map(h => 'galerien/' + folder + '/' + h);

      currentPage = 1;
      renderGallery();

      document.getElementById('currentGalleryTitle').textContent =
        'Aktuelle Galerie: ' + folder.charAt(0).toUpperCase() + folder.slice(1);
    }

    function renderGallery() {
      const section = document.querySelector('.content-gallery');
      const perRow = parseInt(section.getAttribute('data-perRow')) || 4;
      const thumb = parseInt(section.getAttribute('data-thumbSize')) || 150;
      const perPage = parseInt(section.getAttribute('data-maxImages')) || 6;

      const grid = document.getElementById('galleryGrid');
      grid.innerHTML = '';
      grid.style.gridTemplateColumns = `repeat(${perRow}, 1fr)`;

      totalPages = Math.ceil(galleryImages.length / perPage);
      const start = (currentPage - 1) * perPage;
      const end = start + perPage;

      galleryImages.slice(start, end).forEach((src, i) => {
        const img = document.createElement('img');
        img.src = src;
        img.className = 'gallery-thumb-small';
        img.style.width = thumb + 'px';
        img.alt = 'Bild ' + (i + 1);
        img.onclick = () => openGallery(start + i);
        grid.appendChild(img);
      });

      updatePagination();
    }

    function updatePagination() {
      const prevBtn = document.getElementById('prevPage');
      const nextBtn = document.getElementById('nextPage');
      const pageContainer = document.getElementById('pageNumbers');

      prevBtn.disabled = currentPage === 1;
      nextBtn.disabled = currentPage === totalPages;

      pageContainer.innerHTML = '';

      for (let i = 1; i <= totalPages; i++) {
        const btn = document.createElement('button');
        btn.className = 'btn btn-sm m-1 page-btn ' + (i === currentPage ? 'active' : '');
        btn.textContent = i;
        btn.onclick = () => { currentPage = i; renderGallery(); };
        pageContainer.appendChild(btn);
      }

      prevBtn.onclick = () => {
        if (currentPage > 1) { currentPage--; renderGallery(); }
      };
      nextBtn.onclick = () => {
        if (currentPage < totalPages) { currentPage++; renderGallery(); }
      };
    }

    function openGallery(i) {
      currentSlide = i;
      document.getElementById('lightbox-gallery').style.display = 'block';
      showSlide(i);
    }
    function closeGallery() {
      document.getElementById('lightbox-gallery').style.display = 'none';
    }
    function changeSlide(n) {
      currentSlide = (currentSlide + n + galleryImages.length) % galleryImages.length;
      showSlide(currentSlide);
    }
    function showSlide(i) {
      document.getElementById('lightbox-image').src = galleryImages[i];
    }

    document.addEventListener('DOMContentLoaded', loadGalleries);
  </script>
</section>

CSS Block:

Code: Alles auswählen

.content-gallery {
  position: relative;
}
.gal-btn {
  background-color: var(--btnColor, #007bff) !important;
  border-color: var(--btnColor, #007bff) !important;
  color: #fff !important;
  border-radius: 6px;
  transition: all 0.3s ease;
}
.gal-btn:hover {
  opacity: 0.85;
}
.page-btn {
  background-color: transparent;
  color: var(--btnColor, #007bff);
  border: 1px solid var(--btnColor, #007bff);
  border-radius: 4px;
  min-width: 40px;
  transition: all 0.3s ease;
}
.page-btn.active, .page-btn:hover {
  background-color: var(--btnColor, #007bff);
  color: #fff;
}
.gallery-grid {
  display: grid;
  gap: 10px;
  justify-items: center;
}
.gallery-thumb-small {
  cursor: pointer;
  border-radius: 8px;
  transition: transform 0.3s ease, opacity 0.3s ease;
}
.gallery-thumb-small:hover {
  transform: scale(1.05);
  opacity: 0.8;
}
#pagination button {
  min-width: 80px;
}
.lightbox {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.9);
  z-index: 9999;
}
.lightbox-content {
  position: relative;
  margin: 60px auto;
  max-width: 80%;
  text-align: center;
}
.lightbox-image {
  width: 100%;
  max-height: 80vh;
  object-fit: contain;
  border-radius: 10px;
}
.close, .prev, .next {
  color: #fff;
  cursor: pointer;
  font-size: 40px;
  font-weight: bold;
  user-select: none;
  transition: color .3s;
}
.close:hover, .prev:hover, .next:hover {
  color: #bbb;
}
.close {
  position: absolute;
  top: 15px;
  right: 35px;
}
.prev, .next {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  padding: 16px;
}
.prev {
  left: 0;
}
.next {
  right: 0;
}
P {
  color: #ffffff;
}
H3 {
  color: #ffffff;
}
htaccess Datei :

Code: Alles auswählen

Options +Indexes
IndexOptions FancyIndexing NameWidth=*
AddType text/html .html .htm
Volker
Moderator
Moderator
Beiträge: 1690
Registriert: Sa 12. Dez 2020, 22:35

Re: Dynamische Bildergalerie

Ungelesener Beitrag von Volker »

Hallo zusammen,

ich habe eine App gebaut, die Bilder vom Handy direkt in vorgegebene Ordner Eurer Webseite lädt, um sie z.B. in der dynamischen Galerie anzuzeigen. Es geht natürlich auch jede andere Galerie ;)
Screenshot_20251110_214847[1].jpg
Ihr müsst nur einmalig die ftp Daten eingeben, so wie ich im Bild zeige, also nur den Domainnamen, Benutzer und Passwort. Da ich einen Benutzer angelegt habe der nur in den Ordner Bilder kann, brauche ich unten kein Verzeichnis angeben. Ansonsten da eben das Verzeichnis noch eintragen wo die Bilder hin sollen.

Screenshot_20251111_085527[1].jpg
Ihr könnt vor dem Hochladen die Bilder umbenennen und drehen.

Hier der Download zur App: https://www.niederastroth.de/bildupload.apk
Hier die dynamische Bidler Galerie:https://www.niederastroth.de/dynamische_galerie.html

Würde mich freuen wenn der ein oder andere das mal testet :D
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7984
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Dynamische Bildergalerie

Ungelesener Beitrag von Tommy Herrmann »

Moin Volker,

wollte Dich aufmerksam machen:

Hatte gerade mal auf Deiner Seite die Galerie angeguckt. Dabei viel mir auf, dass die Schrift von der vertikalen Sidebar offensichtlich nicht formatiert ist:

Newsletter Sidebar unformatierte Schrift.jpg


… weiterhin sitzt diese Sidebar am Handy unter dem Chatbutton und an meinem Handy liegt dann auch noch der automatisch erscheinende Pfeil "nach oben" ⬆️ über den Buttons, der in Screenshots nicht angezeigt wird:


Newsletter und Chat Buttons am Handy.jpg



Tipp zur Info:

nur mal angucken - Werner Zenk hatte so etwas Ähnliches schon mal im Jahr 2016 erstellt:

https://www.mobirise-tutorials.com/Fotouploadalbum.php

Mit Upload (auch vom Handy), Klickzähler und Editor für jedes Foto, Suchfunktion und beliebig vielen Benutzern, die alle nur ihre eigenen Fotos bearbeiten können, nur der Admin hat Zugriff auf alle Fotos. Das ist dann also eher als ein CMS zu verstehen, das von jedem Browser aus bedient werden kann - ganz ohne Mobirise:


Fotoalbum-Editor.jpg


Upload am Handy:


Fotoalbum Upload am Handy.jpg
Volker
Moderator
Moderator
Beiträge: 1690
Registriert: Sa 12. Dez 2020, 22:35

Re: Dynamische Bildergalerie

Ungelesener Beitrag von Volker »

Das Fotoalbum von Werner kenn ich sehr gut sogar :D
Hatte ich auch mal eingebaut. Aber das ist komplett was anderes - vor allen mit SQLight DB und einiges an Scripten.

Du vergleichts immer Äpfel mit Birnen Tommy. ;)

Ich rede hier von einer App. Dazu ist meine Idee mit der dynamischen Bilder Galerie auch komplett anders gedacht und auch technisch komplett anders aufgebaut. Einfacher eben :D Nix PHP Nix DB Nix Admin ;)

Die Zeit schreitet voran Tommy, was 2016 Top war ist jetzt schon wieder überholt, zumal das Fotoalbum auf Lightbox verzichtet und man immer jede Bild neu klicken muss. ( Das sollte man mal in die Neuzeit überführen )

Ich beschäftige mich im Moment mit Dart, eine Sprache auch für die APP Programmierung für Android und IOS Handys.

Neben dieser "FTP" App hab auch auch schon ein dB Messgerät für mein Handy gebastelt :D
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7984
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Dynamische Bildergalerie

Ungelesener Beitrag von Tommy Herrmann »

Moin,

ich habe das nur erwähnt, weil du ja immer nach Kritik und Anregungen fragst.

Warum vergleiche ich Äpfel mit Birnen? Nein — ich vergleiche zwei Fotoalben.

Ich habe keine Kritik an der App selbst (zumal ich sie gar nicht ausprobiert habe), sehe aber kaum einen Anwendungsfall: Wozu überhaupt eine Handy-App dafür? Das erschließt sich mir nicht. Wenn ich was vom Handy auf meinen Server laden will, verwende ich zum Beispiel seit vielen Jahren einen FTP-Client fürs Handy - wie "AndFTP":

https://play.google.com/store/apps/deta ... dftp&hl=de

Zum Hochladen von Fotos gibt es ebenfalls unzählige Apps:

https://play.google.com/store/search?q= ... e=emea_Med

Apps werden normalerweise in offiziellen App‑Stores wie dem "Apple App Store" und dem "Google Play Store" auf Sicherheit geprüft. Daher lade ich Apps niemals ungeprüft herunter. Aus diesem Grund halte ich es für ratsam, Apps, die du erstellst, in diesen Stores anzubieten.

⚠️ Die Sicherheit von hier zum Download bereitgestellten Apps kann ich nicht beurteilen. Das Risiko liegt also bei jedem Nutzer selbst:

https://www.bsi.bund.de/DE/Themen/Verbr ... -apps.html


Ich kann doch jede andere Anwendung auch am Handy benutzen, wozu also für so etwas eine ungeprüfte App :confused:


Volker hat geschrieben: Mi 12. Nov 2025, 20:31 Die Zeit schreitet voran Tommy, was 2016 Top war ist jetzt schon wieder überholt, zumal das Fotoalbum auf Lightbox verzichtet und man immer jede Bild neu klicken muss. ( Das sollte man mal in die Neuzeit überführen )

Wenn du Werners Fotoalbum bereits selbst genutzt hast, solltest du aber auch wissen, dass es sehr wohl eine Bildergalerie hat — allerdings eine eigene und keine Lightbox, die man unter jedem großen Foto auch starten und beenden kann. Dazu klickt man unter dem großen Foto auf "Diashow":


Diashow Werners Fotoalbum, anstelle einer Lightbox.jpg


Werner hat ganz bewusst auf die damals bereits allgegenwärtige Lightbox verzichtet. Eine Lightbox ist nun wirklich nichts Neues; die gibt es schon deutlich länger (seit 2005) als Werners Fotoalbum.

Und ich habe das Jahr 2016 erwähnt, weil man so ein externes Fotoalbum auch 10 Jahre später nicht wirklich viel besser machen könnte. Es ist also absolut noch zeitgemäß.

Ich habe das nur als Anregung erwähnt: Wer ein Fotoalbum außerhalb von Mobirise anlegen will, benötigt normalerweise auch eine Verwaltung. Das ist nur meine Meinung.
Volker
Moderator
Moderator
Beiträge: 1690
Registriert: Sa 12. Dez 2020, 22:35

Re: Dynamische Bildergalerie

Ungelesener Beitrag von Volker »

Tommy Herrmann hat geschrieben: Do 13. Nov 2025, 04:06
Apps werden normalerweise in offiziellen App‑Stores wie dem "Apple App Store" und dem "Google Play Store" auf Sicherheit geprüft. Daher lade ich Apps niemals ungeprüft herunter. Aus diesem Grund halte ich es für ratsam, Apps, die du erstellst, in diesen Stores anzubieten.
Ich werde keine App bei Google oder Apple anbieten. 1. Kostet Google 25 Euro damit ich da was anbieten kann 2. Mache ich das nur aus Spaß 3. sind meine Apps nicht "unsicher" ;) oder glaubts du ich bau da Trojaner oder sonstiges ein ? 4. ist es mir letztlich auch egal ob jemand die runter lädt oder nicht. 5. ist das alles nach wie vor ein Hobby Projekt mit Spaß für mich und teilweise auch mit Nutzen für andere - natürlich ist nicht alles für alle nützlich ;)

Ich hab z.B. noch einen Newsticker hier liegen, der die News aus einer json einliest - selber verfasste oder aus einem RSS Feed ( Google, Ntv, Tagsschau usw. ) Ob man sowas brauchen kann oder nicht - ich kann sowas erstellen - DAS ist das geile Tommy - ob es das schon gibt juckt mich auch nicht. ICH habe das entwickelt und das ist das was mache, entwickeln, selber probieren ...

Die App ist ein Projekt von vielen die noch folgen werden. dB Schall Messgeräte als App gibts auch zig. Habe selber 2 installiert, aber auch mit haufen voll Werbung. Jetzt hab ich meine eigene App - ohne Werbung und genau so genau oder ungenau wie die anderen Apps ;)

Da ich kein Iphone habe, mache ich mir auch nicht die Mühe meine Apps für IOS zu releasen ;)
Benutzeravatar
vloppy
Mitglied (Level 9)
Mitglied (Level 9)
Beiträge: 86
Registriert: Fr 11. Dez 2020, 11:34
Wohnort: Kempen

Re: Dynamische Bildergalerie

Ungelesener Beitrag von vloppy »

Versuch doch mal eine App/Programm mit der man im Bulkverfahren die Backgrounds von mehreren Fotos auf einmal entfernt, ich sowas https://www.pixelcut.ai/de/hintergrund-entfernen. LG vom Niederrhein
Volker
Moderator
Moderator
Beiträge: 1690
Registriert: Sa 12. Dez 2020, 22:35

Re: Dynamische Bildergalerie

Ungelesener Beitrag von Volker »

So eine App ist möglich, allerdings braucht man um sowas wie pixelcut in Punkto genauigkeit hin zu bekommen einen Server der genug Power hat das in sekunden zu berechnen. Lokal auf dem Handy ist das auch möglich, allerdings in einer Qualität von max. 80-90 % von Pxelcut oder remove.bg.

Ich teste mal was ich hinbekomme - ist spannend :D
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 7984
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: Dynamische Bildergalerie

Ungelesener Beitrag von Tommy Herrmann »

Moin,

also ganz ehrlich, ob sich so ein Arbeitsaufwand lohnt, wo es das doch schon sehr lange an jedem Handy gibt :confused:

So etwas noch neu zu entwickeln kommt mir echt vor wie Eulen nach Athen zu tragen :eek:

Hier mal als Beispiel an meinem Samsung S24 (Android) mit der eingebauter KI bearbeitetes Foto im Standardprogramm von Samsung. Das kann man freistellen wie man will und auch gleich in ein anderes Bild umkopieren oder was auch immer - extrem einfach.




So wird's gemacht - und noch Dutzende von anderen Möglichkeiten der Bearbeitung:

Volker
Moderator
Moderator
Beiträge: 1690
Registriert: Sa 12. Dez 2020, 22:35

Re: Dynamische Bildergalerie

Ungelesener Beitrag von Volker »

Ich hab nur ein A56 :crying:

Das kann das nicht was Du da zeigts und zig andere mittelklasse Handy können es auch nicht.
Nein, das Galaxy A56 kann das Freistellen von Objekten nicht auf dem gleichen Niveau wie das S24. Das S24 hat deutlich leistungsfähigere Prozessoren und fortschrittlichere KI-Funktionen, die speziell für die Bildbearbeitung und das Freistellen entwickelt wurden und zu präziseren und schnelleren Ergebnissen führen. Das A56 ist zwar ein gutes Mittelklasse-Smartphone mit anständiger Kamera, aber es fehlt ihm die gleiche Rechenleistung und die spezialisierte KI für die automatische Objekterkennung und das Freistellen.
Leistung: Das S24 verfügt über einen viel schnelleren Prozessor und mehr KI-Power, was für komplexe Aufgaben wie das Freistellen von Bildern entscheidend ist.
KI-Funktionen: Das S24 profitiert von fortschrittlichen KI-Algorithmen, die für die Bildbearbeitung optimiert sind, um den Hauptunterschied auszumachen.
Ergebnis: Die Ergebnisse bei der automatischen Objekterkennung und dem Freistellen sind beim S24 deutlich präziser.
Kamera: Das A56 hat eine gute Kamera, aber die Qualität der Freistellfunktion wird primär durch die Rechenleistung und Software bestimmt, die beim S24 überlegen ist.
Und wir reden hier auch über eine batch Verarbeitung, auch das kann dein S24 nicht ;) Warte mal bis ich fertig bin. Erste Ergebnisse habe ich schon, allerdings noch nicht zufrieden stellend. Es muss ein anderes Modell her, das bisherige ist zu klein und arbeitet zu ungenau. Kann sein das die App dann ca. 170 MB Groß wird, aber das wäre mir jetzt auch egal :D
Volker
Moderator
Moderator
Beiträge: 1690
Registriert: Sa 12. Dez 2020, 22:35

Re: Dynamische Bildergalerie

Ungelesener Beitrag von Volker »

Es ist ja auch der Spaß Faktor, eine solche App zu entwickeln ( ob das Eulen sind -egal ) :D

Hier mal meine Versuche und Forstschritte :

Original Bild:
JPEG_20251111_091004_8418446098677732595.jpg
Versuch 1:
test.jpg
Versuch 2:
test2.jpg
Man sieht, es wird besser aber noch nicht optimal. Da arbeite ich gerade dran :D

Diese App wird dann auch batch Freistellungen können z.B. und man kann auswählen was freigestellt werden soll usw.

UND das auf jedem Handy - also auch mittelklasse Modelle wie mein A56 ;)
Volker
Moderator
Moderator
Beiträge: 1690
Registriert: Sa 12. Dez 2020, 22:35

Re: Dynamische Bildergalerie

Ungelesener Beitrag von Volker »

Ich komme dem Ziel näher :D
Screenshot_20251116_203332.jpg
Nur mal als Zwischenergebnis für alle die es interessiert ;)
bg1.png
Antworten

Wer ist online?

Mitglieder in diesem Forum: Dieter53 und 2 Gäste