AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi eine Möglichkeit aus einem TMemoryStream herauszufinden welcher Dateityp?
Thema durchsuchen
Ansicht
Themen-Optionen

eine Möglichkeit aus einem TMemoryStream herauszufinden welcher Dateityp?

Ein Thema von dstein · begonnen am 16. Jan 2024 · letzter Beitrag vom 17. Jan 2024
Antwort Antwort
Seite 2 von 2     12   
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#1

AW: eine Möglichkeit aus einem TMemoryStream herauszufinden welcher Dateityp?

  Alt 16. Jan 2024, 14:50
@Delphi.Narium:
Das ist nicht zuverlässig. JPGs mit EXIF-Daten haben möglicherweise keinen "JFIF"-Marker sondern stattdessen "Exif", und es gibt sogar JPGs, in denen weder Exif noch JFIF vorkommt. Der relevante Marker scheint FF D8 in den ersten beiden Bytes zu sein, siehe auch https://de.wikipedia.org/wiki/JPEG_F...rchange_Format (Magic Number).

[EDIT]
Beispiel eines solchen Bilds, das weder Exif noch JFIF enthält: https://i.imgur.com/KdP8C9R.jpg
[/EDIT]

Grüße
Dalai
Ist die Erkennung für PNG denn zuverlässig?

Wenn ja, dann wird halt auf PNG geprüft. Da es nur PNG und JPeg zu geben scheint, ist alles, was nicht PNG ist automatisch Jpeg.

Ansonsten ergänzen wir die JPegprüfung um:

JPeg: Byte 0 bis 2 = $FF$D8$FF oder Byte 6 bis 9 = JFIF ($4A$46$49$46)
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
905 Beiträge
 
Delphi 12 Athens
 
#2

AW: eine Möglichkeit aus einem TMemoryStream herauszufinden welcher Dateityp?

  Alt 16. Jan 2024, 14:56
Quick&Dirty kann man natürlich nach dem try-except-Teil mit TJpegImage das gleiche nochmal mit TPNGImage probieren. So mache ich das (noch) in meinem Player. Der Code stammt halt aus der Zeit, als TPicture das noch nicht konnte.

Muss ich mal umschreiben zu TPicture.LoadFromStream. Das sollte auch etwas schneller gehen.

Zur Zuverlässigkeit: das kannste bei ID3Tags sowieso knicken. Was ich da schon alles für Mist drin gefunden habe ... inklusive der Textkodierung "UTF-32, mit BOM, Zeichenweise." Oder evtl. wars auch zeichenweise nullterminiert UTF-16 mit bom. Auf jeden Fall 6 Byte pro Zeichen.
Being smart will count for nothing if you don't make the world better. You have to use your smarts to count for something, to serve life, not death.
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
482 Beiträge
 
#3

AW: eine Möglichkeit aus einem TMemoryStream herauszufinden welcher Dateityp?

  Alt 16. Jan 2024, 14:57
Gibt es eine Möglichkeit aus einem TMemoryStream herauszufinden welcher Dateityp enthalten ist.
Mit mORMot so:
Delphi-Quellcode:
uses
  mormot.core.buffers;

var stream: TMemoryStream := TMemoryStream.Create;
try
  stream.LoadFromFile('test.png');
  if GetMimeContentTypeFromMemory(stream.Memory, stream.Size) = mtPng then
    ShowMessage('PNG Datei');
finally
  stream.Free;
end;
Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
 
Delphi 12 Athens
 
#4

AW: eine Möglichkeit aus einem TMemoryStream herauszufinden welcher Dateityp?

  Alt 16. Jan 2024, 15:05
In Linux gibt es die Anwendung "file", bzw. das Projekt "filelib", wo ich vor Ewigkeiten auch irgendwo mal eine Übersetzung für Windows gesehen hatte.
Falls jemand die filelib für Windows findet, dann wäre es bestimmt witzig, das hierfür einzusetzen.
Gut, für die 5 Image-Typen vielleich ein winziges Bissl übertrieben.

Hier in der DP sollte sich auch irgendwo eine Funktion verstecken, welche die MagicBytes für die bekanntesten Imageformate prüft. (so weit ich mich erinnern können glaube)

Vielleicht war auch was in den Jedis versteckt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
144 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: eine Möglichkeit aus einem TMemoryStream herauszufinden welcher Dateityp?

  Alt 16. Jan 2024, 15:37
Hier in der DP sollte sich auch irgendwo eine Funktion verstecken, welche die MagicBytes für die bekanntesten Imageformate prüft. (so weit ich mich erinnern können glaube).
An der hast du sogar selbt mitgebastelt.

https://www.delphipraxis.net/213636-...-erkennen.html
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.376 Beiträge
 
Delphi 12 Athens
 
#6

AW: eine Möglichkeit aus einem TMemoryStream herauszufinden welcher Dateityp?

  Alt 17. Jan 2024, 17:33
https://www.delphipraxis.net/1532028-post6.html
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz