2009-09-15 64 views
1

有誰知道任何代碼流Jpeg調整大小。我的意思是讀取一大塊圖像(取決於原始來源和目標大小,這顯然會有所不同),並調整大小,從而在調整非常大的jpeg時調整內存。顯然,這對漸進式jpegs不起作用(或者至少會變得更加複雜),但標準jpeg應該是可能的。流Jpeg Resizer

回答

2

JPEG數據的設計允許簡單調整大小到1/2,1/4或1/8大小。其他變化是可能的。這些相同的尺寸縮小在漸進式jpeg上也很容易實現,如果您想縮小尺寸的圖像,在漸進式文件中解析的數據量將會減少很多。除此之外,你的問題還不夠具體,無法知道你真正想做什麼。

將數據大小減少33%的另一個簡單技巧是將圖像渲染爲RGB565位圖而不是RGB24(如果您不需要全色彩空間)。

+0

我想要做的是能夠將150兆像素圖像轉換爲更小尺寸(例如1兆像素),而無需使用500兆內存將圖像加載到內存中。我希望能夠將更小的塊加載到內存中,並在那些塊上工作,而不是整個塊。 – 2009-09-16 21:43:54

+0

你想要做什麼將需要自定義代碼。我從頭開始編寫自己的JPEG解碼器,可以適應您的目的,而不會有太多麻煩。 x/y解碼循環需要每行/每行渲染像素的分數。整數部門肯定是最容易實現的。聯繫我,如果你需要額外的幫助 - [email protected] – BitBank 2009-09-16 21:52:09

1

我不知道一個庫可以做到這一點,但它當然是可能的。

假設您的JPEG使用的是8x8像素MCU(像素分組的單位)。我們也可以說你正在減少12到1倍。第一個輸出像素需要是輸入圖像左上角的1​​2x12像素塊的平均值。要獲得y座標大於8的輸入像素,您需要解碼第二行MCU的開始。在解碼整個第一行MCU之前,您無法真正解碼這些像素。實際上,這可能意味着您需要存儲兩行解碼的MCU。儘管如此,對於12000x12000像素圖像(大約150萬像素),您可以將內存需求減少12000/16 = 750。這對於PC來說應該足夠了。如果您正在尋找嵌入式應用,您可以在讀取它們時水平調整行的大小,從而將內存需求減少12倍,代價是複雜性更高一些。

我會找到一個簡單的jpeg解碼器庫,如Tiny Jpeg Decoder,並查看jpeg解碼函數中的主循環。在Tiny Jpeg Decoder的情況下,主循環調用decode_MCU,從那裏修改。 :-)

如果你想減少一個非整數因子,你已經有很多工作要做,以使代碼適用於非8x8 MCU,而加載更多。聽起來很有趣。祝你好運。