Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi JPG in Image = gespeichertem JPG (https://www.delphipraxis.net/192241-jpg-image-%3D-gespeichertem-jpg.html)

zeras 2. Apr 2017 12:13

JPG in Image = gespeichertem JPG
 
Ich habe ein JPG und lade dies mit

Delphi-Quellcode:
     fName := AddBackSlash(fDirDst) + ExtractFileName(fNamePic);
      M.LoadFromFile(fName);
      M.Position := 0;
      I.LoadFromStream(M);
      ShowPage := TfShowPicture.Create(Application);
      ShowPage.Image1.Picture.Assign(I);
      ShowPage.Show;
in ein TImage.
Mittels

Delphi-Quellcode:
var
  Jpg: TJPEGImage;

begin
  If (Not Assigned(Image1.Picture.Graphic)) or Image1.Picture.Graphic.Empty Then
    MessageDlg('Kein Bild im Speicher', mtWarning, [mbOK], 0)
  else begin
    if SaveDialog1.Execute then
    Begin
      Jpg := TJPEGImage.Create;
      try
        Jpg.CompressionQuality := Compressionfactor;
        Jpg.ProgressiveEncoding := true;
        Jpg.PixelFormat := jf8Bit;
        Jpg.Assign(Image1.Picture.Graphic);
        Jpg.Compress;
        Jpg.SaveToFile(ChangeFileExt(SaveDialog1.FileName, '.jpg'));
      finally
        Jpg.Free;
      end;
    end;
  end;
end;
kann sich der User dieses Bild wieder speichern.

Wie kann ich sicherstellen, dass das im Image geladene Bild gleich dem zu sichernden Bild ist?
Die originale JPG Datei sollte gleich der gespeicherten JPG Datei sein.
Kann man das sicherstellen, ausser den Stream beim Laden mit im Speicher zu halten?

dummzeuch 2. Apr 2017 13:13

AW: JPG in Image = gespeichertem JPG
 
Zitat:

Zitat von zeras (Beitrag 1366184)
Ich habe ein JPG und lade dies [...]

in ein TImage. [...] kann sich der User dieses Bild wieder speichern.

Wie kann ich sicherstellen, dass das im Image geladene Bild gleich dem zu sichernden Bild ist?
Die originale JPG Datei sollte gleich der gespeicherten JPG Datei sein.

Das dürfte in der Regel nicht der Fall sein. Wenn man ein JPEG lädt und anschließend wieder neu JPEG kodiert, ergeben sich fast immer Unterschiede. Meist wird die Bildqualität nach erneutem Kodieren schlechter.

nahpets 2. Apr 2017 13:27

AW: JPG in Image = gespeichertem JPG
 
Es könnte mit etwas Glück allenfalls gelingen, wenn Du beim Speichern jegliche Komprimierung vermeidest und eine verlustfreie Speicherform wählst.

Die Wahrscheinlichkeit einer binären Übereinstimmung dürfte aber gegen 0 tendieren.

JPEG - Wikipedia

Michael II 23. Apr 2017 13:29

AW: JPG in Image = gespeichertem JPG
 
Hallo zeras

wozu speicherst du das JPG Bild ab, wenn es danach 1:1 dem geladenen Bild entsprechen soll? Wenn der User das Bild ja nicht verändert, dann muss er es am Ende auch nicht abspeichern.

Falls du den User das Bild an einem anderen Ort speichern lassen willst, dann verwende CopyFile(alterOrt, neuerOrt, ...), dann ist es 1:1 :-D.

Und wenn du Bilder leicht verändern [zum Beispiel Text ins Bild schreiben willst o.ä.] und dann so abspeichern willst, dass Quelle und Ziel wo nix geändert wurde 1:1 übereinstimmen, dann verwende ein Format, welches die Pixel RAW lädt und speichert oder eine verlustfreie Kompression wie PNG.

https://de.wikipedia.org/wiki/Portable_Network_Graphics


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz