Obwohl die Antwort von Philip der beste Weg ist, ist es möglich, das zu tun, was Sie wollen, und zwar vollständig innerhalb der Sphäre von JPEG.
JPEG zerlegt Ihr Bild in Blöcke, die als Minimum Coding Units (MCUs) bezeichnet werden, normalerweise jeweils 16 × 16, und komprimiert sie separat. Sie können dies in Bildern sehen, wenn Sie die Komprimierungsstufe sehr hoch drehen. Bei einer angemesseneren Komprimierungsstufe werden die Blöcke so gleichmäßig zusammengefügt, dass Sie die Ränder nie sehen.
Wir können diese Tatsache nutzen, um einem Bild verlustfrei einen einfachen weißen Rand hinzuzufügen. Wir müssen einfach eine hohle Anordnung von weißen Blöcken erstellen, die der Ausgabebildgröße entspricht, und dann die ursprünglichen JPEG-MCU-Blöcke in die Mitte legen
Diese Technik hat einen Nachteil: Sie funktioniert nur, wenn sowohl die Eingangs- als auch die Ausgangsbildgröße ein gerades Vielfaches der MCU-Größe beträgt. Ist dies nicht der Fall, müssen wir einige der Blöcke am Rand zwischen dem weißen Rand und den Rändern des Originalbilds neu komprimieren. Sie werden diesen Unterschied bei der Ausgabe nicht bemerken, wenn Sie sich von den übermäßig hohen JPEG-Komprimierungsstufen fernhalten, sodass die Ausgabe weiterhin effektiv verlustfrei ist.
Mir ist kein Programm bekannt, das nur dies tut. Das Nächste, was mir bewusst ist, ist etwas, das den umgekehrten Vorgang ausführt : jpegtran hat eine Zuschneidefunktion, die Teile der Bildkanten verlustfrei abschneidet die mitte unberührt.
Die einfachste fertige Lösung, die mir bekannt ist, ist das Better JPEG Lossless Resave- Plugin für Photoshop. Es verwendet Techniken, die auf den oben genannten Ideen basieren, um MCUs vom Originalbild zu kopieren, wo immer dies möglich ist, um zu vermeiden, dass sie aus der unkomprimierten Version neu erstellt werden, wie dies in Photoshop normalerweise der Fall ist.³
Exkursionen:
Möglicherweise ist der resultierende Rand nicht ganz weiß , da der Verlust von JPEG zu Farbunterschieden in der Ausgabe führt. Ich habe einige Tests durchgeführt, und zumindest in Photoshop führt ein rein weißes Bild, das mit der JPEG-Stufe 10 von Save For Web (dh mit "geringer" Qualität) gespeichert wurde, zu einem dekodierten Bild, das immer noch rein weiß ist.
Das habe ich mit zwei Tests festgestellt:
Zuerst habe ich das JPEG als Ebene über das Original geladen, den Mischmodus der oberen Ebene auf Differenz eingestellt und dann eine Ebene zum Anpassen der Ebenen darüber hinzugefügt, um zu versuchen, die Unterschiede zu vergrößern. Das resultierende Bild blieb schwarz und zeigte "keinen Unterschied" an.
Zweitens, als ich die erwarteten Unterschiede nicht sah, ließ ich die Einstellungsebene fallen und stellte die JPEG-Ebene auf den normalen Mischmodus zurück, nahm die Pipette und suchte im gesamten Bild nach einem Pixel, das nicht als RGB angezeigt wurde (255,255,255) ) im Infofenster. Ich habe nie einen gefunden. Ich hatte erwartet, dass die Zahlen ein wenig flackern, während ich über das Bild streifte, aber sie blieben felsenfest.
Ich kann nur den Schluss ziehen, dass dies ein entarteter Fall des Kodierungsalgorithmus ist: Reinweiße Blöcke bleiben durch die diskrete Cosinustransformation weiß .
Interessanterweise passiert dies nicht mit reinen schwarzen Blöcken. Zumindest mit Photoshop-Implementierung verwandeln sie sich beim Dekodieren in RGB (1,1,1) und nicht in RGB (0,0,0).
Unterm Strich müssen Sie sich keine Gedanken über gesputterte Punkte in diesem Randbereich machen, wenn Sie ein Bild drucken, das mit der oben beschriebenen Technik erstellt wurde.
jpegtran
ist ein Befehlszeilenprogramm, aber es gibt auch ein GUI-Windows-Programm, das auf demselben Code basiert, der aufgerufen wird jpegcrop
.
Leider ist dieses Plugin nur für Windows.
jpegtran
die Zuschneidefunktion auch zur Erweiterung verwendet werden kann. (Ich bin mir jedoch nicht sicher, welche Farbe die erweiterten Ränder haben.)jpegtran
kann das Bild auch erweitern, aber es wird immer mit einem hartcodierten Mittelgrau, RGB (128,128,128), aufgefüllt. Dies geschieht einfach, weil dies die einzige einfache Option ist, da Sie dies im DCT-Koeffizientenraum mit einem einfachenbzero()
Aufruf tun können . Ich habe einen wilden Hack versucht, um dies zu ändern , was nicht funktioniert, aber Ihnen ein Gefühl für die damit verbundene Hässlichkeit vermitteln sollte. wirft frustriert die Hände hochDer Punkt hier zu erinnern ist , dass Sie Qualität verlieren , wenn Speichern Sie das Foto in einem verlustbehafteten Kompressionsformat. Solange Sie das Foto nach dem Hinzufügen des Rahmens in einem verlustfreien Format (PSD, TIFF usw.) speichern , gehen nicht mehr Daten verloren, als Sie bereits verloren haben, wenn Sie das Foto zunächst als JPEG speichern.
quelle
Es ist nicht ganz verlustfrei, aber mit GIMP (oder einem anderen Editor mit einer ähnlichen Funktion) und den folgenden zwei Tricks können Sie ziemlich genau hinschauen:
Stellen Sie zunächst sicher, dass der Rand, den Sie hinzufügen, ein Vielfaches von 8 Pixel (und vorzugsweise ein Vielfaches von 16 Pixel) breit ist .
Dies ist wichtig, da der JPEG-Komprimierungsalgorithmus das Bild ausgehend von der oberen linken Ecke in 8 × 8-Pixel-Blöcke * aufteilt und den verlustbehafteten Komprimierungsalgorithmus unabhängig auf jeden Block anwendet. Zumindest im Prinzip können Sie ein JPEG-Bild verlustfrei auffüllen, indem Sie die vorhandenen Blöcke mit 8 × 8 Pixeln ergänzen. Wenn Sie jedoch versuchen, einen Rand hinzuzufügen, der nicht eine ganze Anzahl von Blöcken breit ist, stimmen die Blöcke im aufgefüllten Bild nicht mit denen im Original überein, und ein gewisser Komprimierungsverlust ist unvermeidlich.
*) Tatsächlich verwenden die meisten JPEG-Bilder das Chroma-Sub-Sampling. Dies bedeutet, dass nur der Graustufenteil des Bildes in 8 × 8-Blöcken komprimiert wird, während die Chroma-Kanäle vor der Komprimierung um 50% verkleinert werden, wodurch sich ihre effektive Blockgröße auf 16 × erhöht 16 Pixel. Um optimale Ergebnisse zu erzielen, sollte Ihre Rahmenbreite also ein Vielfaches von 16 Pixel sein. Normalerweise kommt man jedoch mit einem Rand von 8 (oder 24 oder 40 usw.) Pixeln davon, da ein gewisser Komprimierungsverlust in der Farbsättigung nicht sehr auffällt.
Der zweite Teil des Tricks besteht darin, beim Speichern des endgültigen Bildes das Kontrollkästchen "Qualitätseinstellungen vom Originalbild verwenden" im Dialogfeld " Bild als JPEG exportieren" (unter "Erweiterte Einstellungen") zu aktivieren. Tun Sie dies auch dann, wenn es den Anschein hat, als würde dies zu einer geringeren Qualität führen, als Sie normalerweise verwenden würden!
Diese Einstellung bewirkt, dass GIMP genau die gleichen Komprimierungseinstellungen verwendet, die für das Originalbild verwendet wurden, wodurch in der Regel etwa 99% der Komprimierungsverluste beseitigt werden, vorausgesetzt, Sie haben das Bild nicht zu stark bearbeitet und insbesondere die Blöcke im Das neue Bild stimmt immer noch mit dem Original überein. (Es wird gelegentlich immer noch Verluste aufgrund von Rundungsfehlern geben, aber viel weniger als sonst.)
Als kurze Demonstration nahm ich dieses JPEG-Testbild aus Wikimedia Commons , das ursprünglich mit einer Einstellung von 50 für eine relativ niedrige Qualität gespeichert wurde, und fügte ihm mit der oben beschriebenen Methode einen schicken 8-Pixel-Schwarzweißrand hinzu:
Hier ist der Unterschied zwischen dem Originalbild (15,1 kB) und dem bearbeiteten Bild (16,7 kB), das im GIMP-Ebenenmodus "Getreideextrakt" angezeigt wird:
Sie können einige sehr leichte Chroma-Fehler sehen, die darauf zurückzuführen sind, dass die Randbreite nicht ein Vielfaches von 16 ist, und (wenn Sie genau hinschauen) einige Blöcke, in denen es aufgrund von Abrundung auch geringfügige Verluste im Lumakanal gab. Optisch sind das Original und das gepolsterte Bild selbst bei zweifacher Vergrößerung und abwechselndem Spiegeln kaum zu unterscheiden.
Insbesondere kontrastiert diese mit dem Ergebnis stößt die JPEG - Qualität auf 50 bis 60 vor dem gepolsterte Bild zu speichern, die das folgenden 17,6 kB Bild ergibt:
Bei hoher Vergrößerung können Sie definitiv feststellen, dass das bearbeitete Bild an einigen Stellen merklich unschärfer ist als das Original, und der Unterschied zu Grain Extract bestätigt dies:
quelle
Entschuldigung, wenn dies nicht genau das ist, was Sie wollten, aber ...
Es hört sich so an, als würden Sie beim Drucken einen weißen Rand hinzufügen, um das Bild besser positionieren zu können. Warum sollten Sie sich nicht darauf konzentrieren, die Druckschnittstellen richtig zu erlernen und solche zweifelhaften Hacks zu vermeiden? Das andere Problem ist, dass Sie dem Druckprogramm erlauben, die Größe Ihres 4680x3120-Bildes an die richtige DPI / Auflösung anzupassen. Dies hat möglicherweise schwerwiegendere Auswirkungen als das erneute Speichern eines JPEG.
quelle
Die bisherigen Antworten sind sehr gut.
Ich werde nur einige "psychologische Aspekte" des JPG-Formats hinzufügen.
Wenn ein JPG gut vorbereitet ist, verliert es nur etwa 0,5% der Informationen. Das ist in den allermeisten Fällen etwas, das das menschliche Auge nicht sehen kann. Sie benötigen ein Programm, um einige Analysen durchzuführen und die Unterschiede zu erkennen (wie die Analyse, die Ilmari gerade durchgeführt hat).
"Gute Qualität" ist ein Prozess, nicht nur die Art und Weise, wie ein Dateiformat das Bild speichert. Ja, Sie haben die Datei noch einmal mit jpg komprimiert, weil Sie sie wirklich gebraucht haben. Wenn es sich um eine kontrollierte Situation handelt, ist dies in Ordnung.
Sie haben es wirklich gebraucht, was bedeutet, dass Sie kein anderes verlustfreies Format verwenden können, sehr spezielle Speicher- oder Softwareanforderungen haben oder einen sehr engen Workflow haben.
Wenn Sie sich wirklich Gedanken über die Qualität machen, würden Sie Paint wahrscheinlich nicht verwenden. Das JPG-Format verfügt über einige Konfigurationen, die Sie in Paint überhaupt nicht steuern können.
Hier ist meine Liste der kostenlosen Programme, mit denen Sie die JPG-Komprimierung wirklich steuern können, sowie die Option, die Sie auswählen müssen. (Alle im JPG-Speicherdialog)
Irfanview - Aktivieren Sie diese Option, um die Unterabtastung für Chroma-Farben zu deaktivieren.
FastStone Image Viewer - Farbunterabtastung: Keine.
Gimp - Subsampling 4: 4: 4
Fazit. Verwenden Sie keine Farbe.
Eine Sache habe ich noch nicht überprüft. Wenn alle diese Programme das eingebettete Farbprofil beibehalten. Ich werde meinen Beitrag später bearbeiten.
quelle
IrfanView funktioniert bei mir gut für Bildersätze. Hier finden Sie einige Hinweise zur Vorgehensweise
Hier ist meine gespeicherte Prozedur zum Einfügen eines Rahmens - Infran-Prozedur zum Hinzufügen eines Rahmens
quelle