Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Typ eines Blob Feldes Ermitteln (https://www.delphipraxis.net/151545-typ-eines-blob-feldes-ermitteln.html)

DrNo 22. Mai 2010 11:32

Datenbank: MS-SQL • Version: 2008 • Zugriff über: SDAC-Komponenten

Typ eines Blob Feldes Ermitteln
 
Hallo Delphi Fans,
als Newbee habe ich folgende Frage:

In einer MS-SQL Datenbank sind Bilder verschieden Typ in einem
BLOB gespeichert. (.jpg, .gif usw.)
Nun muss ich diese per FTP auf eine WebSite hochlden.
In einem DBImage kann ich die Bilder wunderbar anzeigen.
Nun möchte ich aber ein Bild (z.B. 4000008.GIF) welches sich im
BLOB befindet hochladen. Der Name des Bildes ist in diesem Fall
eine Artikelnummer, die mir natürlich bekannt ist. Mein Problem
ist dass ich keine Ahnung habe von welchem Typ das gespeicherte
Bild ist.
Frage: Wie kann ich den Grafiktyp einer in einem BLOB gespeicherten
Grafik ermitteln ?

Danke im voraus für Eure Hilfe

himitsu 22. Mai 2010 11:38

Re: Typ eines Blob Feldes Ermitteln
 
Zitat:

Zitat von DrNo
Frage: Wie kann ich den Grafiktyp einer in einem BLOB gespeicherten
Grafik ermitteln ?

Indem du diese ausließt und analysierst, bzw. analysieren läßt.

> TImage könnte man mißbrauchen und dann schaut man nach, von welchem Typ das Picture ist ... "is TBitMap", "if Assigned(picture.Bitmap)" oder irgendwie so.
> oder man schaut sich den Header (die ersten Bytes) der Datei/Daten an ... jedes Grafikformat hat eine bestimmte Signatur
> und die Billigvariante schaut sich die Dateiendung an (welche aber nicht zuverlässig stimmen muß)

oder du speicherst das Format in einem zusätzlichen Feld, dann mußt du die Datei einmal beim Abspeichern prüfen und brauchst dann nur noch dieses kleine Feld auslesen.

Hansa 22. Mai 2010 11:39

Re: Typ eines Blob Feldes Ermitteln
 
Spendiere der Tabelle mit dem Blob-Feld noch eine Spalte mit dem genauen Typ.

DrNo 22. Mai 2010 11:58

Re: Typ eines Blob Feldes Ermitteln
 
Danke für die ersten Infos,
da die Tabelle aus einer 'Fremdanwendung' ERP-System
stammt kann ich das mit der Typ-Spalte nicht realisieren.

Hansa 22. Mai 2010 16:18

Re: Typ eines Blob Feldes Ermitteln
 
Doch, auslesen in Hilfstabelle und zusätzlichem eigenem Typ-Feld.

DrNo 23. Mai 2010 05:50

Re: Typ eines Blob Feldes Ermitteln
 
Danke für den Hinweis,
werde es mal auf diese Weise versuchen.
Gruß
DrNo

toms 23. Mai 2010 06:35

Re: Typ eines Blob Feldes Ermitteln
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von DrNo
Frage: Wie kann ich den Grafiktyp einer in einem BLOB gespeicherten
Grafik ermitteln ?

Indem du diese ausließt und analysierst, bzw. analysieren läßt.

Ansatz (ungetestet, unvollständig)

Delphi-Quellcode:
function GetImgFormatFromField(AField: TField): MyImageType;
var
  fldBLOB: TBlobField;
  MemStream: TMemoryStream;
  ImgGraphic: TGraphic;
  imgFormat: array[1..3] of char;
begin
  MyImageType := ImgUnknown;
  if (AField is TBlobField) then
  begin
    fldBLOB := TBlobField(AField);
    if not (fldBLOB.IsNull) then
    begin
      MemStream := TMemoryStream.Create();
      try
        fldBLOB.SaveToStream(MemStream);
        MemStream.Position := 0;
        if (MemStream.Size > 3) then
        begin
          MemStream.Read(imgFormat, 3);
          if (imgFormat[1] = 'B') and (imgFormat[2] = 'M') then
           MyImageType := // BMP
          else if (imgFormat[1] = 'G') and (imgFormat[2] = 'I') and (imgFormat[3] = 'F') then
           MyImageType := // GIF
          else if (imgFormat[1] = #$FF) and (imgFormat[2] = #$D8) and (imgFormat[3] = #$FF) then
           MyImageType := // JPEG
          else if (imgFormat[1] = 'E') and (imgFormat[2] = 'X') and (imgFormat[3] = 'I') then
           MyImageType := // EXIF
          else if (imgFormat[1] = #$D7) and (imgFormat[2] = #$CD) and (imgFormat[3] = #$C6) then
           MyImageType := // WMF
          else
           MyImageType := ImgUnknown// anderes Format
        end;
      finally
        MemStream.Free;
      end;
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 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