jak poznat obrázek JPEG
Ahoj,
jak se dá v Delphi poznat, že v zadaném souboru s příponou .jpeg, .jpg je skutečně obrázek JPEG a ne třeba přejmenovaný .doc? Má JPEG nějakou standardní hlavičku?
Díky za radu
Ahoj,
jak se dá v Delphi poznat, že v zadaném souboru s příponou .jpeg, .jpg je skutečně obrázek JPEG a ne třeba přejmenovaný .doc? Má JPEG nějakou standardní hlavičku?
Díky za radu
Zpět do poradny Odpovědět na původní otázku Nahoru
http://www.fastgraph.com/help/jpeg_header_format.ht ml
To nie je uplne korektne, kazdy jpeg sice pravdepodobne bude zacinat FFh D8h, ale za tym nebude velkost ale napr. hned dalsi marker FFh E0h (JFIF) apod.
Ale je pravda ze ten test prvych 2bytov na FFh, D8h by mohol stacit (zhlavy ale neviem zarucit ze takto bude zacinat kazdy jpeg). Ale ako pisem nizsie nechapem na co je to dobre...
P.S. JFIF jpeg (s inymi sa asi ani nestretne) bude vyzerat takto ako je to nakreslene tu headerinfo.htm
dalo by sa testovat teda:
FF D8 FF E0, xx xx (cokolvek - 2byty), "JFIF", 00
Podla google jpg nema standardny header. Sklada sa z blokov zacinajucimi markermi (ale len dva byty FFh a typ bloku), ktore tam byt mozu ale nemusia (musia tam byt samozrejme bloky ktore obsahuju data obrazku )
Nechapem celkom o co ti ide, ved ak by to bol premenovany .doc tak ti to tvoje rutiny/procedury ktore to maju dekodovat nezdekoduju, snad v svojom programe nevolas funkcie ktore spustaju automaticky word :-O
Z našeho IS exportujeme data do externího systému. Součástí dat jsou přílohy - soubory JPEG. Pro export platí několik pravidel
1) soubory jsou ve formátu JPEG
2) velikost souboru nepřesáhne 640x640 bodů
3) celková velikost exportní dávky nepřesáhne 500kB
Podstatný je bod 1, tedy potřebuju otestovat, zda soubor, který uživatel připojil, je skutečně JPEG. Na otestování přípony se spoléhat nemůžu, chtělo by to nějakou důkladnější kontrolu.
Jinak díky za podněty
No, povedal by som ze ak musis testovat aj velkost obrazku (max. 640x640bodov), tak musis zavolat fciu ktora v tom subore najde nejaky header (ci uz JFIF alebo len klasicky) a z neho zisti velkost obrazku, a teda ak ten header najde s nejakymi rozumnymi udajmi sirkaxvyska, tak je to urcite jpeg. Ak fcia vrati nejaky error tak to jpeg nie je. Teda predpokladam ze ta fcia bude podporovat len jpeg-y a nic ine (ziadne bmp apod.), ak pouzijes nejaku univerzalnu fciu aj pre .bmp apod, tak samozrejme tym nezarucis ze to bude jpg.
Rozumím. Jde jen o to, zda existuje nějaká taková už hotová funkce (třeba přímo v Delphi), abych se v tom nemusel šťourat ručně. Vypadá to totiž docela jako lahůdka, a ručně vyzobávat pro všechny možné a nemožné formáty JPEGů se mi to opravdu nechce
A čo tak to otvoriť v TJPEGImage a načítať údaje odtiaľ? Ak bude chyba pri otváraní, tak to nie je korektný súbor JPG.
Třeba ti pomůže tohle: jpeginfo.html
(dole je odkaz ke stažení)
Možno Ti pomôže toto:
{
JPEG-Errorcodes:
#36 : m:=m+'Output file write error --- out of disk space?';
#51 = JERR_NO_QUANT_TABLE: Quantization table 0x%02x was not defined
#52 : File is not a JPEG-File (for example if you try to read a GIF as a JPG)
#53 = JERR_OUT_OF_MEMORY: Insufficient memory (case %d)
#60 : JPEG file is incomplete
#67 : JPEG file is incomplete (like #60 - don't know where the difference
How to trap a JPEG-Error?
}
Pozerám, že občas mi to myslí dobre.
Ahoj,
moc díky všem za tipy, vypadá to na ten TJPEGImage.
Vaše Žlababa
Stahni si "Dump JPEG marker information" zde:
15260.htm
po par pokusech typu:
JPEGDUMP.EXE -v -v OBRAZEK.JPG
zjistis, kde co v souborech hledat
nebo mi napis na skype
zdenek.kubena