Frage zur Bild-Upload-Größe/Größenanpassung

Nachdem ich dieses Thema, dieses hier und dieses durchgelesen habe, bin ich mir nicht mehr ganz sicher, was Discourse mit großen Bildern macht. Mein vorheriges Verständnis war, dass keine Software-basierte Größenanpassung stattfindet, sondern nur CSS – dass die Bildgröße durch die Einstellung „Maximale Bild-Upload-Größe in kB

Das funktioniert alles sofort out-of-the-box:

Rechtsklick auf :arrow_double_up: Quelltext anzeigen – das Bild ist klein. Klicken Sie darauf, und Sie sehen das Bild in voller Auflösung.

Wenn ich also max upload auf 10 MB und max megapixel auf 12 setze, was passiert dann, wenn ein Benutzer versucht, ein 16-Megapixel-Bild mit 7 MB hochzuladen?

Bei den Standardeinstellungen sind ein signifikanter Prozentsatz der Fotos, die von neueren Smartphones aufgenommen werden, größer als 4096 kB, liegen aber weit unter 40 Megapixeln.

Ich verstehe immer noch nicht, was in diesem Fall passiert oder warum die Standardwerte so festgelegt sind.

Ich empfehle, mit den Einstellungen zu experimentieren: Ändere eine Einstellung, lade ein riesiges Bild hoch und schaue, was passiert.

OK, das kann ich machen. Allerdings möchte ich auch verstehen, was die Software tatsächlich tut, damit ich fundiertere Entscheidungen treffen kann. In der Zeit, in der ich Discourse verwende, habe ich gelernt, die Standardeinstellungen zu respektieren und nur bei Bedarf zu ändern. In diesem Fall funktionieren die Standardwerte für eine relativ typische Community nicht besonders gut, und ich bin neugierig, warum sie so eingestellt sind, welche vernünftigen Werte ich stattdessen in Betracht ziehen sollte und was passiert, wenn ich diese Änderungen vornehme.

Beim Lesen des Codes ist die maximale Megapixelzahl eine strikte Einschränkung. Sie dient als Sicherheitsmechanismus und wird nicht vom System zur Entscheidungsfindung bei einer automatischen Verkleinerung herangezogen.

max_image_size_kb ist der einzige Faktor, der für die automatische Verkleinerung beim Hochladen maßgeblich ist.

Erhöhen Sie die maximale Megapixelzahl auf den absoluten Höchstwert, den Sie jemals hosten möchten.

Nachdem ich eine Weile wild auf Tasten herumgedrückt habe, um herauszufinden, was los ist, komme ich zu folgendem Schluss:

  • Bei einer Standardinstallation gilt: Wenn client_max_body_size == max image size kb ist, werden Bilder nicht verkleinert.

  • Eine Erhöhung von client_max_body_size ermöglicht größere Uploads, die Discourse dann versuchen wird, unterhalb des in max image size kb festgelegten Limits zu verkleinern.

  • Trotz der Beschreibung, die etwas anderes suggeriert, begrenzt max image size kb die Upload-Größe tatsächlich nicht (das ist extrem verwirrend!).

  • Die Upload-Größen werden ausschließlich über client_max_body_size von nginx festgelegt.

  • Beim Verkleinern bleiben JPEGs JPEGs mit guten Ergebnissen.
    PNGs werden in JPGs umgewandelt mit akzeptablen Ergebnissen.
    Animierte GIFs bleiben GIFs, jedoch meist mit schlechten Ergebnissen.

Stimmt das alles? Wenn ja, scheint es eine Sache zu sein, die etwas besser erklärt werden sollte, da eine Installation aus dem Kasten heraus keine Bildverkleinerung vornimmt, obwohl dies eine Funktion ist, die viele Nutzer wünschen könnten. Zudem ist aus der verfügbaren Dokumentation überhaupt nicht ersichtlich, wie man dies aktiviert.

Hmm, ich habe gerade die nginx.sample.conf auf GitHub angesehen, und es scheint, als ob der Standardwert für client_max_body_size jetzt 10 MB statt 4 MB beträgt. War das schon immer so? Mir ist nicht bewusst, dass ich diese Datei auf meiner Installation vor heute jemals geändert habe.

Vielen Dank für die gründlichen Tests mit der aktuellen Version. Ich habe es geprüft, und es scheint in der Praxis genau so zu funktionieren, wie du es beschrieben hast.

Die maximale Körpergröße ist schon seit geraumer Zeit auf 10 festgelegt; wir sollten sie wahrscheinlich auf 20 erhöhen.

Ich stimme zu, dass wir die Beschreibung der Seiteneinstellung verbessern sollten. Das werde ich heute noch erledigen.

EDIT:

Die Dokumentation wurde aktualisiert gemäß:

https://review.discourse.org/t/doc-improve-documentation-of-image-limit-site-settings/9303

Hi Sam, laut der Beschreibung scheint es bei mir nicht zu funktionieren:

+ max_image_size_kb: “Die maximale Bildgröße beim Hochladen in kB. Dies muss auch in nginx (client_max_body_size) / Apache oder einem Proxy konfiguriert werden. Bilder, die größer als dieser Wert, aber kleiner als client_max_body_size sind, werden beim Hochladen auf die passende Größe angepasst.”

+ max_image_megapixels: “Maximale Anzahl an Megapixeln, die für ein Bild erlaubt sind. Bilder mit einer höheren Megapixelzahl werden abgelehnt.”

Oder zumindest scheint kein Versuch zur Größenanpassung unternommen zu werden.

Ich hatte max_image_size_kb auf 1000kb gesetzt, und ein Bild, das knapp darüber lag, wurde durch einen Link ersetzt, gefolgt von dem Text (image larger than 1000KB).

Ich habe die Einstellung auf 500kb geändert, und dasselbe ist passiert.

Ich habe client_max_body_size in NGINX nicht geändert, da ich davon ausgehe, dass er den Standardwert (4096) hat.

Das betrifft übrigens Bilder, die direkt verlinkt sind (hot linked). Ich nehme an, wenn die Option download remote images to local aktiviert ist, sollte dies wie ein normales Hochladen behandelt werden? (Falls nicht, können wir das bitte so anpassen, dass es gleich verhält?)

Edit: Okay, beim direkten Hochladen funktioniert die Größenanpassung – super! Also scheitert es nur beim Abrufen externer Bilder. Ehrlich gesagt bin ich mir nicht sicher, welches Verhalten ideal wäre, aber auf den ersten Blick würde ich denken, dass auch diese Bilder angepasst werden sollten.

Ich denke, das ist eine separate Funktionsanfrage. Wenn Sie die maximale Bildgröße auf 200 KB senken, macht es definitiv Sinn, die verlinkten Bilder beim Herunterladen einfach zu verkleinern. Es gelten bestimmte Schwellenwerte; wir sollten kein 700-Gigabyte-Bild herunterladen, nur um das herauszufinden, aber ja, da ließe sich noch etwas verbessern.

Ich stimme dir zu, Sam. Ehrlich gesagt kann ich mir keinen Grund vorstellen, warum heruntergeladene verlinkte Bilder nicht denselben Regeln folgen sollten.


Ich habe gerade auch entdeckt, dass eine Änderung der maximalen Bildgröße tatsächlich Einfluss auf die endgültige Dateigröße hat – das ist wirklich toll! Eine Einstellung auf 500 KB hat dazu geführt, dass ein 1,2 MB großes Bild auf 360 KB skaliert wurde; bei 200 KB landete dieselbe Datei bei 118 KB :+1: (obwohl sie natürlich auch kleiner ist).

Edit: Argh, aber dann tritt wieder das ursprüngliche Problem auf – Bilder, die zu groß sind, um skaliert zu werden, schlagen fehl mit:

lib/discourse.rb:57:in `exec': convert: improper image header `/tmp/image20200228-23391-t365z9.jpg' @ error/png.c/ReadPNGImage/4294.

Ich frage mich, ob es eine Möglichkeit gibt, dass DC immer eine Skalierung durchführt? Auch wenn das Bild am Ende winzig ist?


Dies ist die Standardeinstellung in unseren Foren. Ich habe versucht, sie auf 20000 zu ändern, und es hat funktioniert (oder schien zu haften), aber als ich ein Bild/GIF mit 17,2 MB hochladen wollte, wurde ich mit dieser Fehlermeldung konfrontiert:


Können Sie mir sagen, welchen Pfad ich unter Linux eingeben muss (welche Befehle), um die “client_max_body_size” in nginx zu ändern? Ich nutze einen DigitalOcean-Droplet.

Bedeutet das, dass der Standardwert bald von 4096 auf 20000 geändert wird?

Brillant, @riking! Danke, Kumpel!

/var/discourse enthält nur einen freigegebenen Ordner. Ich kann die von dir erwähnte Datei nicht finden. Mein Problem ist, dass ich eine brandneue Discourse-Installation habe und das Hochladen von Bildern in Beiträgen überhaupt nicht funktioniert. Selbst als Admin erhalte ich die Fehlermeldung: „Entschuldigung, beim Hochladen dieser Datei ist ein Fehler aufgetreten. Bitte versuche es erneut.

Wenn in /var/discourse nichts vorhanden ist, haben Sie möglicherweise eine ältere Installation. Prüfen Sie auch /var/docker.

Hmm, versuchen Sie es mit einem Neuaufbau? Möglicherweise haben Sie ein altes Basis-Image, das das Fehlen des mmdb-Schlüssels nicht korrekt behandelt hat.

Okay, so so sehen diese Ordner aus.


Ich bin mir nicht sicher, wie man neu aufbaut. Bitte um Anleitung! Dies ist eine brandneue Installation auf einer VM, und ich habe absolut keine Fehler erhalten. Alles scheint zu funktionieren, außer der Grafik.

Wie Jay hier fragt: Uploading Files to Discourse - #3 by pfaffman
Haben Sie eine offizielle Standard-Installation von Discourse durchgeführt?