Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Welche Art von Grafik wurde gespeichert (https://www.delphipraxis.net/206561-welche-art-von-grafik-wurde-gespeichert.html)

NoName1 6. Jan 2021 11:01

Welche Art von Grafik wurde gespeichert
 
Guten Tag,
ich habe in einem Blob-Feld eine Grafik gespeichert.
Die Grafik will ich nun wieder auf die Festplatte speichern.

Delphi-Quellcode:
TabellenName.FieldByName('grafik').SaveToFile('D:\grafikname.???)

Wie kann bestimmt werden welche Art von Grafik (png, bmp usw...) gespeichert werden soll,
wenn nicht mehr bekannt ist, um welche Art von Grafik es sich handelt?

Vielen Dank für Eure Hilfe.

Klaus01 6. Jan 2021 11:11

AW: Welche Art von Grafik wurde gespeichert
 
.. Du könntest die File-Signatur auswerten: -> https://blog.netspi.com/magic-bytes-...s-at-a-glance/

Grüße
Klaus

TiGü 6. Jan 2021 12:16

AW: Welche Art von Grafik wurde gespeichert
 
Jede Graphic-Klasse hat eine überladene class function CanLoadFromStream, die die von Klaus in Spiel gebrachte Idee umsetzt.
Das kannst dann verwenden, um aus dem Blob-Stream zu ermitteln, welche File-Extension gebraucht wird.

Delphi-Quellcode:

uses
  Vcl.Graphics,
  Vcl.Imaging.pngimage,
  Vcl.Imaging.jpeg,
  Vcl.Imaging.GIFImg;

function GetImageFileExtensionFromBlobStream(const ABlobStream: TStream): string;
begin
  if TBitmap.CanLoadFromStream(ABlobStream) then
  begin
    Result := 'bmp';
  end
  else if TPngImage.CanLoadFromStream(ABlobStream) then
  begin
    Result := 'png';
  end
  else if TJPEGImage.CanLoadFromStream(ABlobStream) then
  begin
    Result := 'jpg';
  end
  else if TGIFImage.CanLoadFromStream(ABlobStream) then
  begin
    Result := 'gif';
  end
  else
    Result := 'unknown';
end;

Klaus01 6. Jan 2021 12:20

AW: Welche Art von Grafik wurde gespeichert
 
Danke, wieder was gelernt :o)

NoName1 6. Jan 2021 17:30

AW: Welche Art von Grafik wurde gespeichert
 
Vielen Dank für die Hilfestellung,
wenn ich die function von TiGü einsetze
erhalte ich immer als Extension "bmp" ob wohl eine png-Datei von mir gespeichert wurde.


Delphi-Quellcode:
var
  pExtension: string;
  pMStream: TMemoryStream;
  pAdressID: Int64;
begin
  // MvST -----------------------
  pAdressID := LeseAdressID(1);

  dtmdMain.ibqryEineUnterschrift.Close;
  dtmdMain.ibqryEineUnterschrift.ParamByName('pAdressID').Value := pAdressID;
  dtmdMain.ibqryEineUnterschrift.Open;
  pMStream := TMemoryStream.Create();
  try
    pMStream.Position := 0;
    dtmdMain.ibqryEineUnterschriftUTSCHRIFTBRD.SaveToStream(pMStream);
    pExtension := GetImageFileExtensionFromBlobStream(pMStream);// Code von TiGü
    Showmessage(pExtension); // <<löschen nicht vergessen
  finally
    pMStream.Position := 0;
    pMStream.Free;
    dtmdMain.ibqryEineUnterschrift.Close;
  end;
  // ---------------------------------
  dtmdMain.sqlKopiereUnterschrift.Close;
  dtmdMain.sqlKopiereUnterschrift.ParamByName('pAdressID').Value := pAdressID;
  dtmdMain.sqlKopiereUnterschrift.ExecQuery;
  dtmdMain.sqlKopiereUnterschrift.FieldByName('utschriftbrd').SaveToFile(GlobalPfad + AnmeldeName
    + '\uschrmvst.' + pExtension);
  dtmdMain.sqlKopiereUnterschrift.Close;


Was mache ich falsch?

Klaus01 6. Jan 2021 17:40

AW: Welche Art von Grafik wurde gespeichert
 
.. wie wird denn die Grafik als Blob abgespeichert?

Grüsse Klaus

NoName1 6. Jan 2021 17:49

AW: Welche Art von Grafik wurde gespeichert
 
Die Grafik speichere ich so:
Im Value wird der Pfad und der Name der Datei übergeben:
z.B.: "d:\VerzeichnisName\name_der_datei.png"

Delphi-Quellcode:
  procedure TOAdressen.SetUSchrBruder(const Value: string);
begin
  dtmdMain.DoStartTransaction;
  dtmdMain.adressen.Edit;
  if Value <> '' then
    dtmdMain.adressenUTSCHRIFTBRD.LoadFromFile(Value)
  else
    dtmdMain.adressenUTSCHRIFTBRD.Clear;
  dtmdMain.adressen.Post;
end;

Klaus01 7. Jan 2021 07:13

AW: Welche Art von Grafik wurde gespeichert
 
.. mhm,
kannst Du mal debuggen und schauen was in Deinem Stream steht?
Eine Konvertierung von png/jpg nach bmp wird nirgends vorgenommen?

Grüße
Klaus

TiGü 7. Jan 2021 08:03

AW: Welche Art von Grafik wurde gespeichert
 
Genau, direkt nach dtmdMain.adressenUTSCHRIFTBRD.LoadFromFile(Value) einfach mal in einen Stream zurück laden und der Funktion vorwerfen.
Ggf. ein bisschen mit der Reihenfolge der If-Abfragen spielen, also TPngImage.CanLoadFromStream(ABlobStream) zuerst.

NoName1 7. Jan 2021 11:16

AW: Welche Art von Grafik wurde gespeichert
 
Vielen Dank Euch beiden.
Mit dem zusätzlichen Tipp von TiGü hat es geklappt.
Also neueinlesen und dann an die Funktion übergeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 Uhr.
Seite 1 von 2  1 2      

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