我瞭解JPEG圖像有許多類型的「元數據」的:JPEG原始塊中的「元數據」邊界究竟在哪裏?
http://fotoforensics.com/tutorial-meta.php
,但在那裏我將不得不削減字節數組分裂BLOB成普通的元數據的一部分,剩餘的實際圖像數據部分?
我想保留所有元數據,調整圖像大小,然後再次添加先前存儲的元數據。
什麼是魔術分隔符字節序列或位置什麼的?
感謝
我瞭解JPEG圖像有許多類型的「元數據」的:JPEG原始塊中的「元數據」邊界究竟在哪裏?
http://fotoforensics.com/tutorial-meta.php
,但在那裏我將不得不削減字節數組分裂BLOB成普通的元數據的一部分,剩餘的實際圖像數據部分?
我想保留所有元數據,調整圖像大小,然後再次添加先前存儲的元數據。
什麼是魔術分隔符字節序列或位置什麼的?
感謝
簡短的回答是 「這取決於......」 :)
有幾件事情需要考慮:
我遠離這些格式的專家,但不幸的是我認爲答案比你複雜得多希望。如果你想讀取所有的非圖像數據信息,你真的需要解析整個圖像文件。好消息是,我確信必須有庫來做到這一點(儘管我不知道JS庫)。
這是嚴重過度簡化,但它只是爲了給你的,你需要尋找到
CNC中一些引用什麼的想法:
http://en.wikibooks.org/wiki/JPEG_-_Idea_and_Practice/The_header_part
http://en.wikipedia.org/wiki/JPEG#JPEG_files
謝謝,這是很棒的信息!太糟糕了,它比我希望的要複雜得多。我想簡單地提取Exif元數據然後(已經這樣做)並稱之爲一天:/ – user3280015 2014-10-31 14:46:24
一個後續問題:Exif(JFIF)編碼的JPEG文件是否也包含,非Exif(非JFIF)元數據在同一時間?或者這是一個公平的假設,Exif或JFIF文件包含Exif的東西或JFIF的東西,沒有別的。 – user3280015 2014-10-31 14:49:55
@ user3280015是的。我對複雜的Exif格式有較少的經驗,但我相信Exif元數據本身實際上是在圖像開頭的APP1段標記後面指定的。如果您想添加任意信息,只需將其插入您創建的任何APPx細分標記之後即可。只要確保長度字段正確,並且您應該可以在任意數量的APPx段中添加任意數量的數據 – 2014-10-31 14:53:10
我回應澄清一些事情。 JPEG標準是不可實施的。例如,它定義瞭如何對組件進行編碼和解碼,但沒有定義它是什麼組件。 JFIF是第一種常用的填充空白的JPEG文件格式。
如果我們將元數據定義爲解碼壓縮圖像時不需要的所有描述性數據;數據和元數據之間存在相當清晰的界限。大多數情況下,任何APPn或COM標記都是元數據。
我說大部分是因爲僅僅存在一個JFIF APP0標記會告訴解碼器該圖像是灰度圖或是YCbCr格式,而不是伽瑪校正。 JFIF中實際上只有很少的元數據(縮略圖,像素密度)。
JFIF和EXIF流的結構僅在定義格式的APPn標記的格式上有所不同。由於APPn標記包括長度,因此解碼器可以跳過標記而不讀取任何元數據。換句話說,JPEG解碼器只需要知道它遇到了JFIF APP0標記或EXIF APP1標記來解碼圖像,並且不需要讀取那些標記內的數據。
與JFIF相比EXIF的複雜性更高,只發生在APPn標記中。同樣,解碼器可以通過簡單地跳過標記來忽略該複雜性。
JFIF要求流首先使用SOI標記,後跟APP1 JFIF標記。之後,您可以以任意順序包含您想要的任何APPn或COM標記。唯一的限制是標記數據不能以JFIF或JFXX開頭。
在鏈接到壓縮數據的JFIF APP0標記中沒有任何內容。 EXIF不適用。您可以將圖像大小編碼爲也在SOF標記中編碼的APP1標記。如果這些價值觀不同,我不知道會發生什麼。解碼器可能會使用SOF標記中的值並忽略APP1標記中的值。但是,有些應用程序可能不喜歡不同的值。
標記級別的JPEG流結構非常簡單。 EXIF標頭過於複雜。
這對JavaScript有什麼影響? – bzeaman 2014-10-31 12:20:03
其實我想用JavaScript(Blob類型)來做到這一點,但我認爲更低級別的語言受衆可能在字節級操作文件方面更有經驗。 – user3280015 2014-10-31 12:26:39