Ich habe ein Foto im JPEG-Format mit der Auflösung 4680x3120. Ich möchte einen weißen Rahmen um dieses Foto hinzufügen und es in ein 5200 x 3467-Foto verwandeln (aus Druckgründen).
Natürlich ändere oder entferne ich nichts von dem Foto, ich füge einfach etwas hinzu. Daher kann dieses Verfahren im Prinzip verlustfrei sein. Wenn ich jedoch Paint verwenden würde, um diesen Rand hinzuzufügen, wird der Speichervorgang von Paint das Foto erneut in das JPEG-Format komprimieren, wodurch Informationen und Qualität verloren gehen.
Gibt es eine Möglichkeit (ein professionelleres Programm), einem JPEG-Foto etwas hinzuzufügen, z. B. einen Rahmen, ohne den ursprünglichen Teil des Fotos zu beeinträchtigen, ohne seine Qualität zu beeinträchtigen?
Obwohl Philips Antwort der beste Weg ist, ist es möglich, innerhalb der Sphäre von JPEG zu tun, was Sie wollen.
JPEG funktioniert, indem es Ihr Bild in Blöcke aufteilt, die als Minimum Coding Units (MCUs) bezeichnet werden und normalerweise jeweils 16 × 16 groß sind, und diese separat komprimiert. Sie können dies in Bildern sehen, wenn Sie die Komprimierungsstufe sehr hoch drehen. Bei vernünftigeren Komprimierungsstufen fügen sich die Blöcke so nahtlos ineinander, dass Sie nie die Grenzen sehen.
Wir können diese Tatsache ausnutzen, um einem Bild verlustfrei einen einfachen weißen Rand hinzuzufügen. Wir müssen einfach ein hohles Array aus weißen Blöcken erstellen, das der Größe des Ausgabebildes entspricht, und dann die ursprünglichen JPEG-MCU-Blöcke in die Mitte fallen lassen.¹
Diese Technik hat einen Nachteil: Sie funktioniert nur, wenn sowohl die Eingangs- als auch die Ausgangsbildgröße ein gerades Vielfaches der MCU-Größe sind. Wenn dies nicht der Fall ist, müssen wir einige der Blöcke am Rand zwischen dem weißen Rand und den Rändern des Originalbilds erneut komprimieren. Sie werden diesen Unterschied in der Ausgabe nicht sehen, wenn Sie sich von den übermäßig hohen JPEG-Komprimierungsstufen fernhalten, so dass es immer noch effektiv verlustfrei ist.
Mir ist kein Programm bekannt, das nur das kann. Das nächste, was mir bekannt ist, ist etwas, das die umgekehrte Operation ausführt: jpegtran hat eine Zuschneidefunktion, die Teile der Bildränder verlustfrei wegschneidet.² Dies geschieht, indem die abgeschnittenen MCUs entlang der Bildränder verworfen und diese drin gelassen werden die Mitte unberührt.
Die einfachste fertige Lösung, die ich kenne, ist das Plugin Better JPEG Lossless Resave für Photoshop. Es verwendet Techniken, die auf den oben genannten Ideen basieren, um MCUs aus dem Originalbild zu kopieren, wo immer es möglich ist, um zu vermeiden, dass sie aus der unkomprimierten Version neu erstellt werden, wie es Photoshop normalerweise tut.³
Abschweifungen:
Sie könnten denken, dass der resultierende Rand nicht ganz weiß sein wird, da die Verluste von JPEG zu einer Art Farbunterschied in der Ausgabe führen. Ich habe einige Tests durchgeführt, und zumindest in Photoshop führt ein rein weißes Bild, das über JPEG Level 10 (dh "niedrige" Qualität) von Save For Web gespeichert wurde, zu einem decodierten Bild, das immer noch rein weiß ist.
Ich habe dies mit zwei Tests festgestellt:
Zuerst habe ich das JPEG als Ebene auf das Original geladen, den Mischmodus der obersten Ebene auf „Differenz“ eingestellt und dann eine Ebenen-Anpassungsebene darüber hinzugefügt, um zu versuchen, die Unterschiede zu vergrößern. Das resultierende Bild blieb schwarz, was „kein Unterschied“ anzeigte.
Zweitens, als ich die erwarteten Unterschiede nicht sehen konnte, ließ ich die Einstellungsebene fallen und kehrte die JPEG-Ebene in den normalen Mischmodus zurück, nahm das Pipettenwerkzeug und suchte im gesamten Bild nach einem Pixel, das nicht als RGB angezeigt wurde (255.255.255 ) im Infobereich. Ich habe nie einen gefunden. Ich hatte erwartet, dass die Zahlen ein wenig flimmern würden, als ich über das Bild schrubbte, aber sie blieben felsenfest.
Ich kann nur schlussfolgern, dass dies ein entarteter Fall des Codierungsalgorithmus ist: Reinweiße Blöcke bleiben durch die diskrete Kosinustransformation weiß .
Interessanterweise passiert dies bei rein schwarzen Blöcken nicht . Zumindest mit der Implementierung von Photoshop werden sie beim Decodieren zu RGB (1,1,1), nicht zu RGB (0,0,0).
Unterm Strich brauchen Sie sich keine Gedanken über Spritzer in diesem Grenzbereich zu machen, wenn Sie ein Bild drucken, das mit der obigen Technik erstellt wurde.
jpegtran
ist ein Befehlszeilenprogramm, aber es gibt auch ein GUI-Windows-Programm, das auf demselben Code namens jpegcrop
.
Leider ist dieses Plugin nur für Windows verfügbar.
Denken Sie daran, dass Sie beim Speichern des Fotos in einem verlustbehafteten Komprimierungsformat an Qualität verlieren. Solange Sie das Foto nach dem Hinzufügen des Rahmens in einem verlustfreien Format (PSD, TIFF usw.) speichern, verlieren Sie nicht mehr Daten, als Sie bereits verloren haben, wenn Sie das Foto überhaupt erst als JPEG speichern.
Es ist nicht ganz verlustfrei, aber Sie können mit GIMP (oder einem anderen Editor mit einer ähnlichen Funktion) und den folgenden zwei Tricks ziemlich nahe kommen:
Stellen Sie zunächst sicher, dass der Rand, den Sie hinzufügen, ein Vielfaches von 8 Pixel breit ist (und vorzugsweise ein Vielfaches von 16 Pixel).
Dies ist wichtig, da der JPEG-Komprimierungsalgorithmus das Bild in 8×8-Pixel-Blöcke * aufteilt, beginnend in der oberen linken Ecke, und den verlustbehafteten Komprimierungsalgorithmus unabhängig auf jeden Block anwendet. So können Sie zumindest im Prinzip ein JPEG-Bild verlustfrei auffüllen, indem Sie ganze 8×8-Pixelblöcke um die vorhandenen herum hinzufügen. Wenn Sie jedoch versuchten, einen Rand hinzuzufügen, der keine ganze Anzahl von Blöcken breit war, würden die Blöcke im aufgefüllten Bild nicht mit denen im Original übereinstimmen, und ein gewisser Komprimierungsverlust wäre unvermeidlich.
*) Tatsächlich verwenden die meisten JPEG-Bilder Chroma-Subsampling , was bedeutet, dass nur der Graustufenteil des Bildes tatsächlich in 8 × 8-Blöcke komprimiert wird, während die Chroma-Kanäle vor der Komprimierung um 50 % herunterskaliert werden, sodass ihre effektive Blockgröße 16 × beträgt 16 Pixel. Für beste Ergebnisse sollte Ihre Rahmenbreite also wirklich ein Vielfaches von 16 Pixeln sein. Allerdings kommt man in der Regel mit einem Rand von 8 (oder 24 oder 40 etc.) Pixeln davon, da ein kleiner Komprimierungsverlust im Chroma nicht sehr auffällt.
Der zweite Teil des Tricks besteht darin, beim Speichern des endgültigen Bildes das Kontrollkästchen "Qualitätseinstellungen des Originalbildes 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!
Durch diese Einstellung verwendet GIMP genau die gleichen Komprimierungseinstellungen wie für das Originalbild, wodurch normalerweise etwa 99 % der Komprimierungsverluste eliminiert werden, vorausgesetzt, Sie haben das Bild nicht zu stark bearbeitet und insbesondere die Blöcke in der Das neue Bild stimmt immer noch mit denen im Original überein. (Gelegentlich kommt es immer noch zu Verlusten durch Rundungsfehler, aber viel weniger als sonst.)
Als schnelle Demonstration habe ich dieses JPEG-Testbild von Wikimedia Commons genommen, das ursprünglich mit einer ziemlich niedrigen Qualitätseinstellung von 50 gespeichert wurde, und ihm mit der oben beschriebenen Methode einen schicken (sozusagen) 8-Pixel-Schwarz-Weiß-Rand hinzugefügt:
Hier ist der Unterschied zwischen dem Original (15,1 kB) und dem bearbeiteten Bild (16,7 kB), dargestellt mit dem Ebenenmodus "Kornextraktion" von GIMP:
Sie können einige sehr leichte Farbfehler erkennen, die dadurch verursacht wurden, dass die Rahmenbreite kein Vielfaches von 16 ist, und (wenn Sie genau hinsehen) einige Blöcke, bei denen es aufgrund von Rundungen auch zu geringfügigen Verlusten im Luma-Kanal kam. Dennoch sind das Original und das aufgefüllte Bild visuell nicht zu unterscheiden, selbst bei 2-facher Vergrößerung und abwechselndem Umblättern zwischen ihnen.
Vergleichen Sie dies insbesondere mit dem Ergebnis der Erhöhung der JPEG-Qualität von 50 auf 60, bevor Sie das aufgefüllte Bild speichern, was das folgende 17,6-kB-Bild ergibt:
Bei starker Vergrößerung sieht man definitiv, dass das bearbeitete Bild an manchen Stellen deutlich unschärfer ist als das Original, und der Unterschied mit Körnungsextrakt bestätigt dies:
compare
erhalte ich einen PSNR von 34,5826 für das ursprüngliche JPEG, 34,5752 für die Kopie, die mit denselben Qualitätseinstellungen erneut gespeichert wurde, und 34,3653 für die bei q40 erneut gespeicherte. Gut genug?Tut mir leid, wenn das nicht genau das ist, was du wolltest, aber...
Es hört sich so an, als ob Sie einen weißen Rand als Hilfe für die Positionierung Ihres Bildes beim Drucken hinzufügen. Warum konzentrieren Sie sich nicht darauf, die Druckschnittstellen richtig zu lernen und solche zweifelhaften Hacks zu vermeiden? Das andere Problem, das dies aufwirft, ist, ob Sie dem Druckprogramm erlauben, die Größe Ihres 4680 x 3120-Bildes an die richtige DPI/Auflösung anzupassen. Dies kann schwerwiegendere Auswirkungen haben als das erneute Speichern eines JPEG.
Die vorherigen 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% Informationen. Das ist in den allermeisten Fällen etwas, was das menschliche Auge nicht sehen kann. Sie brauchen ein Programm, um einige Analysen durchzuführen und die Unterschiede zu sehen (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 neu komprimiert, weil Sie sie wirklich brauchten. Wenn es sich um eine kontrollierte Situation handelt, ist dies in Ordnung.
Sie brauchen es wirklich , es bedeutet, dass Sie kein anderes verlustfreies Format verwenden können, Sie sehr spezifische Speicher- oder Softwareanforderungen haben oder einen sehr engen Arbeitsablauf haben.
Wenn Sie wirklich über die Qualität besorgt sind, würden Sie Paint wahrscheinlich nicht verwenden. Das JPG-Format hat einige Konfigurationen, die Sie in Paint überhaupt nicht steuern können.
Hier ist meine Liste mit kostenlosen Programmen, mit denen Sie die JPG-Komprimierung wirklich steuern können, und die Option, die Sie auswählen müssen. (Alle im jpg-Speicherdialog)
Irfanview – Aktivieren Sie „Chroma-Farb-Subsampling deaktivieren“.
FastStone Image Viewer – Farbunterabtastung: Keine.
Gimp - Subsampling 4:4:4
Fazit. Verwenden Sie keine Farbe.
Eines habe ich noch nicht überprüft. Wenn alle diese Programme das eingebettete Farbprofil beibehalten. Ich werde meinen Beitrag später bearbeiten.
IrfanView funktioniert gut für mich für Bildersätze. Hier sind einige Anleitungen
Hier ist meine gespeicherte Prozedur zum Einfügen von Grenzen - Infran-Prozedur zum Hinzufügen einer Grenze
Sie können dies kostenlos mit Adobe Acrobat tun! Klicken Sie mit der rechten Maustaste auf Ihr Foto und dann auf Mit Adobe Acrobat öffnen. Klicken Sie in Adobe auf PDF bearbeiten. Wählen Sie das gesamte Bild aus (Strg A) und verkleinern Sie es dann etwas, sodass es einen weißen Rand hat. Klicken Sie dann auf Exportieren als und wählen Sie Ihr gewünschtes Format (JPEG, PNG usw.).
Superkatze
mattdm
jpegtran
die Zuschneidefunktion von tatsächlich auch zum Erweitern verwendet werden kann. (Ich bin mir jedoch nicht sicher, welche Farbe die erweiterten Ränder haben.)Warren Jung
jpegtran
kann das Bild auch erweitern, aber es füllt immer mit einem fest codierten mittleren Grau, RGB (128,128,128).bzero()
Dies geschieht einfach, weil dies die einzige einfache Option ist, da Sie dies im DCT-Koeffizientenraum mit einem einfachen Aufruf tun können . Ich habe versucht, dies mit einem wilden Hack zu ändern , der nicht funktioniert, aber Ihnen ein Gefühl für die damit verbundene Hässlichkeit geben sollte. wirft frustriert die Hände hochIlmari Karonen
Warren Jung
JBLOCK
2D-Arrays falsch interpretiere, also schreibe ich in Speicherplatz, den ich nicht besitze. Fühlen Sie sich frei, Ihren eigenen Patch zu erstellen oder auf meinem zu riffeln. Ich glaube, ich habe dieses Kaninchen so weit ins Loch gejagt, wie es mir beliebt.Hobbs
Raffael
Warren Jung