Ich habe vor, ein Skript zu schreiben, das mehr als 100.000 JPEG-Bilder scannt und sie erneut komprimiert, wenn sie in Bezug auf die Dateigröße "zu groß" sind. Skripterstellung ist der einfache Teil, aber ich bin mir nicht sicher, wie ich ein Bild als "zu groß" einstufen soll.
Zum Beispiel gibt es ein 2400x600px-Bild mit einer Dateigröße von 1,81 MB. Mit dem Befehl "Für Web speichern" von Photoshop wird eine 540-KB-Datei mit 60 Qualität und gleichen Abmessungen erstellt. Dies entspricht etwa 29% der Originalgröße.
Jetzt denke ich darüber nach, diese Zahlen als Richtlinie zu verwenden. Etwas wie 540 KB / (2.400 * 600 / 1.000.000) = 375 KB pro Megapixel. Jedes größere Bild wird als groß angesehen. Ist das der richtige Ansatz oder gibt es einen besseren?
Bearbeiten 1: Die Bilder müssen für die Anzeige auf Websites optimiert werden.
Bearbeiten 2: Ich kann die gewünschte Ausgabequalität durch Experimentieren bestimmen. Ich muss wissen, ob die Bilder in Bezug auf die Dateigröße oder die Abmessungen groß sind und in geringerer Qualität gespeichert werden müssen.
quelle
Antworten:
Im Durchschnitt liegt der Sweet Spot von JPEG bei etwa einem Bit pro Pixel .
Dies hängt natürlich vom Bildinhalt ab, da bestimmte Grafiktypen (z. B. flache Bereiche und glatte Farbverläufe) besser komprimiert werden als andere (Rauschen, Text). Daher ist es keine robuste Methode, jedes Bild blind anzuwenden.
Sie haben auch das Problem, dass Sie kein unkomprimiertes Referenzbild zum Vergleichen haben, sodass Sie nicht genau wissen, wie hoch die aktuelle Qualität Ihrer Bilder ist und wie viel mehr Sie die Qualität verringern können, um noch akzeptabel zu sein. Die Qualität kann bis zu einem gewissen Grad anhand von Quantisierungstabellen in JPEGs erraten werden, ist jedoch auch keine zuverlässige Methode (insbesondere ist die Qualitätsbeurteilung von ImageMagick für JPEGs mit benutzerdefinierten, optimierten Quantisierungstabellen sehr falsch).
Trotzdem gibt es einen vernünftigen praktischen Ansatz:
Es ist wichtig, nicht nur die kleinere Dateigröße auszuwählen, sondern stattdessen die Dateigröße erheblich zu verringern. Dies liegt daran, dass durch die Neukomprimierung von JPEG die Dateigröße aufgrund von Detailverlusten, die durch die verlustbehaftete Natur von JPEG und die Konvertierung in 8-Bit-RGB verursacht werden, immer geringfügig abnimmt. Daher können kleine Abnahmen der Dateigröße zu einem unverhältnismäßig großen Qualitätsverlust führen, der sich nicht lohnt es.
quelle
Die Größe der mit JPEG komprimierten Dateien hängt von der Komplexität des Bildes ab. Wenn Sie versuchen, die Dateigröße so zu steuern, wie Sie es beschreiben, wird die Bildqualität sehr unterschiedlich wahrgenommen.
Betrachten Sie stattdessen die folgenden Optionen:
Der gut genug Ansatz. Verwenden Sie eine für Sie akzeptable Qualitätseinstellung wie 75. Vergleichen Sie die Größe des Ergebnisses mit dem Originalbild und behalten Sie die kleinere Datei bei. Siehe Welche Qualität beim Konvertieren in JPG wählen?
Verwenden Sie einen JPEG-Minimierer wie JPEGmini oder
jpeg-recompress
aus dem JPEG -Archiv . Sie sind im Wesentlichen darauf ausgelegt, das zu tun, was Sie zu versuchen scheinen, aber mit mehr Bewusstsein für JPEG-Algorithmus-Interna.Generieren Sie Miniaturansichten in verschiedenen Größen , wie Nathancahill vorschlägt, aus Sicht der Webentwickler.
quelle
Nein, das ist ein falscher Ansatz.
Die Dateigröße in Pixel hat zwar etwas mit dem Endgewicht zu tun, ist aber nicht der einzige Faktor.
Einen Test machen. Nehmen Sie eine vollständig weiße Datei mit denselben 2400 x 600 Pixel und speichern Sie sie als JPG.
Machen Sie jetzt ein Foto eines Waldes (gleich 2400x600px) mit vielen Details und speichern Sie es. Diese Datei wird mit denselben Komprimierungseinstellungen größer.
Die endgültige Größe hängt von diesen 3 Faktoren ab:
Sie können und sollten das Gewicht also nicht basierend auf der Pixelgröße definieren.
Aber ich verstehe dein Problem.
Ohne Analyse der aktuellen Komprimierung des Bildes ist es schwierig, das "optimale" Gewicht (das relativ zum Betrachter oder zur Verwendung der Bilder ist) zu definieren.
Sie können wahrscheinlich eine Komprimierungseinstellung definieren und "alle" erneut komprimieren. Ich weiß nicht, ob Sie dies vor dem "Hochladen" tun möchten, was Ihnen wahrscheinlich mehr Zeit spart als das gespeicherte Überspringen einiger von ihnen.
Es gibt einige Tools, die ein Bild analysieren und das aktuelle Komprimierungsverhältnis berechnen. Aber ich bezweifle, dass es so wichtig ist.
quelle
jpeg size / raw size
undraw size = pixel size * number of pixel
,pixel size
3 Oktetts ist für einen 24 - Bit - RGB - Farbraum. Und wie Sie selbst sagen, reicht diese Metrik nicht aus, um festzustellen, ob ein Bild ausreichend komprimiert ist.Webentwickler hier. So würde ich das angehen:
1. Bestimmen Sie die angezeigten Bildabmessungen und die erforderlichen Bildschirmauflösungen.
Ihre erste Aufgabe besteht darin, zu bestimmen, bei welchen Pixelgrößen die Bilder angezeigt werden. Sind sie Produktfotos in einem Online-Shop? Eine Fotogalerie? Benutzerprofilfotos? Mehrere verschiedene Größen? Erstellen Sie eine Liste der benötigten Pixelabmessungen. Überprüfen Sie, ob Sie für hochauflösende Bildschirme wie aktuelle Telefone und Tablets @ 2x-Bilder benötigen.
2. Verwenden Sie ein Miniaturbildskript, um neue Bilddateien zu erstellen.
Diese werden als Miniaturbildskripte bezeichnet, können jedoch für viel mehr als nur Miniaturansichten verwendet werden. Es gibt viele Skripte oder Sie können Ihre eigenen schreiben. Wenn Sie die Größe der Originaldateien nicht ändern, können Sie dies wiederholen, wenn Sie einen Fehler in Ihrem Skript machen oder später feststellen, dass Sie ein Bild mit höherer Auflösung benötigen. Es ist üblich, im Ausgabedateinamen ein Suffix anzugeben. Zum Beispiel:
3. Komprimieren.
Das Miniaturbildskript sollte die JPG-Komprimierung angeben, wenn Sie die neuen Bilddateien ausschneiden. Es gibt jedoch auch andere Minifier, die die Dateigröße möglicherweise noch weiter reduzieren.
quelle
Während @ Rafaels Antwort die JPEG-Komprimierung in- und auswendig erklärt hat, werde ich versuchen, Ihr Web zu beantworten und problematisch hochzuladen.
Die Verwendung eines Bildes auf einer Website (für Design oder Inhalt) bestimmt einige Anforderungen: Wofür wird mein Bild verwendet? Logo, Titelbild, Miniaturbild, Foto in einem Blog-Beitrag, Vollbildfoto für eine Galerie ... Wenn Sie es für mehrere Zwecke verwenden (z. B. ein Foto und das Miniaturbild der Galerie), möchten Sie es in allen erforderlichen Größen ablehnen. Sofern Sie nicht Ihre eigene Website erstellen, generiert der heutige Webservice heutzutage kleinere Bilder aus Ihrem größeren Bild, um sie vor Ort zu verwenden.
Nachdem Sie Ihren Bildzweck kennen, benötigt die Website (oder das CMS oder das Front-End-Framework) immer eine maximale Pixelgröße, damit Ihr Bild den Anforderungen entspricht. Die Logos können maximal 600 x 600 Pixel groß sein, die Hintergrundabdeckung maximal 1280 x 720 Pixel, das Inhaltsfoto für die Vollbildanzeige 1920 x 1080 oder die native Auflösung der Kamera für absolute Detailerhaltung. Überprüfen Sie die richtige Größe von der Website, auf die Sie hochladen möchten. Abhängig von dem Verhältnis, das Sie erreichen möchten, möchten Sie mindestens eine der maximal erforderlichen Pixelgrößen anpassen. Beachten Sie, dass einige Dienste Ihr Bild zuschneiden und dehnen, wenn das Seitenverhältnis nicht gleich ist. In diesem Fall müssen Sie Ihr Bild neu zuschneiden, um es an die erforderliche maximale Größe und das erforderliche Verhältnis anzupassen.
In diesem Fall kann die Website eine Dateigrößenbeschränkung festlegen (oder auch nicht, je nach Bildzweck). In Bezug auf die Ladezeit der Seite gilt: Je leichter, desto besser. In Ihrem Beispiel eines hochauflösenden Bildes mit 2400 x 600 Pixel sind 300 bis 500 KB eine absolut feine Größe für die Ladezeit. Inhaltsbilder (z. B. Fotos) können schwerer sein, wenn der Bildzweck dies erfordert (z. B. Vollbildanzeige), ggf. bis zur nativen Auflösung Ihrer Kamera. Wenn keine Angabe gemacht wird, kann die Begrenzung der Dateigröße schwer zu erraten sein, da sie von der Ausrüstung des Publikums (mobil, Desktop ...), der Netzwerkqualität des Publikumslandes ... abhängen kann. Für maximale Qualität und Service behandeln Sie das Foto nacheinander Holen Sie sich die minimale Dateigröße ohne sichtbare Artefakte. Aus Gründen der Benutzerfreundlichkeit oder Geschwindigkeit kann die Größe des Skripts mithilfe einer insgesamt zufriedenstellenden Komprimierungsstufe geändert werden (ca. 70 sollten in Ordnung sein).Die Antwort von @ xiota könnte auch das Werkzeug sein, das Sie benötigen. Setzen Sie hier Ihren eigenen Standard.
TL; DR Der Bildzweck auf der Website ist der Schlüssel für die Größenänderung / Komprimierung.
quelle
Was Sie berechnen, ist die durchschnittliche komprimierte Größe eines Bildpixels. Wenn Sie diese durch die Rohpixelgröße dividieren (normalerweise 3 Oktette für ein 24-Bit-RGB), erhalten Sie das Komprimierungsverhältnis.
Dies ist eine gute Metrik, die Ihnen Informationen über den Komprimierungszustand des Bildes gibt. Es reicht jedoch nicht aus, zu beurteilen, ob das Bild ausreichend komprimiert ist oder nicht, da das Komprimierungsverhältnis nicht nur vom Komprimierungsprofil abhängt (Algorithmus = JPEG, Qualität = 60/100), aber auch auf das Komprimierungspotential des Bildes: Unterschiedliche Bilder mit derselben Rohgröße und demselben Komprimierungsprofil ergeben unterschiedliche JPEG-Größen, da Bilder mehr oder weniger einfach zu komprimieren sind (ein leeres Bild ist sehr einfach zu komprimieren, weiß Lärm ist nicht).
Aus diesem Grund und weil das "zuletzt verwendete" Qualitätsprofil nicht in diesem Bild gespeichert ist (weder in Metadaten noch in der JPEG-Header-Struktur), besteht der am häufigsten verwendete Ansatz beim erneuten Veröffentlichen von Bildern mit einem Zielgrößen- / Qualitätsprofil darin, nur neu zu komprimieren (und möglicherweise die Größe ändern) alles (automatisch) unabhängig vom Ausgangszustand des Bildes.
Ja, Sie können erneut komprimieren, wenn dies nicht erforderlich ist. Ja, Sie können sogar Speicherplatz verlieren, wenn Sie mit einem Profil höherer Qualität erneut komprimieren. Dies sind jedoch Randfälle, und im großen Maßstab ist es am einfachsten, ein Zielqualitätsprofil sicherzustellen. Natürlich möchten Sie dies nur einmal tun, um die Bilder nicht allmählich zu verschlechtern, und Sie sollten wahrscheinlich zwei Bildbibliotheken speichern: die anfängliche "unberührte" und die "zu veröffentlichende / erneut komprimierte".
Es gibt viele Tools, mit denen Sie eine Reihe von Dateien erneut komprimieren können. Sie können auch eigene Skripte erstellen und mit dem richtigen technischen Stack (meistens C ++ und libjpeg) kann es selbst für> 100.000 Dateien verdammt schnell gehen.
Wenn Sie einen intelligenteren / komplexeren Prozess implementieren möchten, können Sie versuchen, mit einer iterativen Logik zum erneuten Komprimieren / Vergleichen der Größe zu experimentieren, um das ursprüngliche Qualitätsprofil abzuschätzen (das erneute Komprimieren mit derselben Qualität sollte ungefähr dieselbe Größe mit einem hohen Wert ergeben Qualität sollte die Größe leicht erhöhen und bei geringerer Qualität die Größe deutlich verringern). Dies würde natürlich viel mehr CPU-Leistung verbrauchen.
quelle
Die ursprüngliche unkomprimierte Größe beträgt 2400 x 600 x 3 = 4.320.000 Byte (4,1 MB), da die 24-Bit-Farbe immer drei Byte RGB-Daten pro Pixel umfasst . An dieser absoluten Wahrheit führt kein Weg vorbei.
Die JPG-Größe hängt jedoch auch von den Bilddetails ab. Große glatte Bereiche (wie Himmel oder bemalte Wände) werden besser komprimiert, aber Bereiche mit größeren Details (wie ein Baum voller Blätter) werden nicht so gut komprimiert. Es gibt also keinen absoluten numerischen Indikator.
540 KB sind jedoch 0,540 / 4,1 = 13% der ursprünglichen Größe von 4,1 MB . Es sind möglicherweise 29% der vorherigen JPG-Größe, aber 13% der ursprünglichen unkomprimierten Größe. Das ist also 1/8 der ursprünglichen unkomprimierten Größe, was normalerweise als "anständige" Qualität angesehen wird. Nicht optimal, nicht maximale Qualität, aber im Allgemeinen anständig, vielleicht gut genug für einige Anwendungen. Nur zu sagen, es ist schon klein.
Eine größere JPG-Datei bietet eine bessere Bildqualität und eine kleinere eine geringere Bildqualität. Sie müssen entscheiden, was gut genug ist, aber JPG ist niemals "zu groß", da die Bildqualität mit der JPG-Komprimierung abnimmt. 24-Bit-Farbe hat drei Bytes pro Pixel unkomprimiert.
Die Entscheidung ist also, ob Sie es klein oder gut wollen.
Das Vergrößern eines vorhandenen JPG ist jedoch noch schlimmer, da mehr JPG-Artefakte hinzugefügt werden und die Daten, sobald sie klein sind, geändert werden und niemals besser werden.
JPG-Artefakte zeigen normalerweise zwei Möglichkeiten: sichtbare 8x8-Pixelblöcke einer Farbe in den glatten Bereichen ohne Detail oder als sichtbare raue Kanten um die Detailkanten.
Wenn Sie ein JPG bearbeiten und erneut speichern, werden zusätzliche JPG-Artefakte hinzugefügt. Wenn dies erforderlich ist, empfiehlt es sich, immer neu zu speichern, um die ursprüngliche Komprimierungseinstellung zu erreichen.
quelle
"Save for Web" von Photoshop ist eigentlich ein ziemlich guter Kompromiss zwischen Dateigröße und -qualität. Wenn Sie also keine spezifischeren Anforderungen haben, sollten Sie sich dafür entscheiden. Ein typischer Rat für Webentwickler ist, sich an einen Qualitätsbereich von 50-70% zu halten. Natürlich gibt es Ausnahmen: Sie möchten eine 90-95% ige Qualität eines Firmenlogos, das jederzeit gut aussehen muss (oder es sogar in ein verlustfreies Format konvertieren muss) und bei einem großen, aber kaum 30% igen Wert sichtbarer Seitenhintergrund.
Vergessen Sie auch nicht, Ihre Bilder neu zu skalieren. Ein 2400x600-Bild sieht auf einem 4K-Display großartig aus, wird jedoch auf kleineren Bildschirmen neu skaliert, wodurch Datenbandbreite verschwendet wird, ohne dass der Benutzer eine visuelle Verbesserung erzielt. Überprüfen Sie die Website-Vorlage, die Sie verwenden, um die optimale Breite für die Bilder zu ermitteln. Normalerweise liegt der Wert zum Zeitpunkt des Schreibens zwischen 1200 und 1300 Pixel (siehe die gängigste Auflösung hier ).
Denken Sie daran, die Originale der Bilder, die Sie in Webqualität konvertieren, beizubehalten. Wenn Sie dieses Material jemals überarbeiten oder drucken müssen, werden Sie es leider nur in 60% Qualität und 1 Mpix Auflösung haben.
quelle