2010-06-29 41 views
6

我試圖通過優化嵌入的PNG圖形來進一步減少SWF文件的文件大小(使用ImageOptim工具)。令我驚訝的是,這並沒有產生任何影響,所以我創建了兩個測試圖像:Flex:Flex編譯器是否自動優化嵌入的PNG資產?

Original(433883字節)

Optimized(273723字節)

當一個簡單的嵌入這兩種資產ActionScript項目中,編譯的SWF大小約爲274kb。這引出了一個問題:Flex在編譯期間是否優化嵌入式PNG資產?如果是,是否有一些關於優化的文檔? 這不可能是因爲單獨使用SWF壓縮,因爲壓縮圖像並不會減少文件大小。

這裏的完整性代碼:

package 
{ 
    import flash.display.Sprite; 

    public class SizeTest extends Sprite 
    { 
     [Embed("/assets/original.png")] 
     private var ImageAsset:Class; 

     public function SizeTest(){ 
     } 
    } 
} 
+0

壓縮圖像使文件大得多。所以這是一個壞主意。你在使用eclipse嗎?如果是這樣,請嘗試Project> Export Release build。它會減少SWF大小 – Treby 2010-06-30 09:53:18

+0

這可能是一個愚蠢的問題,但是你在根應用程序中包含對SizeTest的引用嗎?如果沒有,sizeTest不會被編譯,並且圖像沒有被嵌入。 – 2010-06-30 17:59:24

+0

@Treby是的,我知道這一點。導出的SWF是以發佈模式編譯的。 @Marty上面列出的類*是根應用程序。這是Flex中的一個簡單的僅ActionScript項目。 – bummzack 2010-07-01 19:29:42

回答

4

答案是,Flex編譯器不會自動壓縮數據其中一種inbult算法(可能是ZLIB),並在它允許您訪問未壓縮數據之前,在另一側(flash player)透明地解壓縮它。

我將一個ByteArray嵌入到SWF中,儘管外部的字節數很大(200 KB),但當嵌入到SWF中時,它將變成30 KB,產生的結果幾乎與使用ByteArray.compress("zlib")手動壓縮該結果的結果完全相同。

然後我嘗試手動壓縮PNG/JPEG位圖,結果比使用[Embed]標記(172 KB作爲壓縮的ByteArray與168 KB作爲嵌入圖像)明顯嵌入更大。讓Flex編譯器處理嵌入式數據壓縮實際上比嘗試在ByteArray方面做你自己的技巧要好。

編輯:要回答你關於PNG嵌入的問題,很難說在flex編譯器/ flash播放器裏面發生了什麼。雖然以正確的文檔而聞名,但Adobe也因許多「無證的功能」而聞名。您的具體問題最好發送給Flash播放器架構師(例如Tinic Uro)或Adobe傳教士(例如Lee Brimelow),其中一些人可以在Facebook上輕鬆訪問(請參閱list)。

+0

有趣。我會想象,雖然一個PNG已經嚴重壓縮,並不應該通過使用zlib得到那麼小? – bummzack 2011-02-13 09:37:38

+0

@bummzack - 查看我的更新後的文章,是的,他們似乎使用每種文件格式最優化的壓縮,可能會關閉壓縮,而不會產生顯着的改進。我發現無論你做什麼,默認的flex [Embed]配置總是效果最好。我想這裏是Adobe真正閃耀的一個地方。 – 2011-02-17 02:26:33

+0

感謝您的回答。我知道如何將答案標記爲「接受」,我會這樣做,儘管它沒有完全回答我最初的問題。我沒有在ByteArray *方面做任何詭計。我使用的是一個PNG壓縮工具(http://imageoptim.pornel.net/),它可以完成很多特殊的圖像壓縮(參見:http://optipng.sourceforge.net/pngtech/optipng.html)。使用優化後的圖片而不是「未優化」的圖片並沒有減少已編譯的「swf」的文件大小。因此,想知道Flex編譯器是否實現了這些PNG壓縮技術(請參閱鏈接)。 – bummzack 2011-02-17 09:32:14

2

該瑞士法郎格式具有內部爲在那裏它們得到分裂成24bit的PNG和灰度阿爾法掩模32個PNG(那些帶有alpha通道)的特殊格式由此alpha掩碼獲得JPEG壓縮。我完全不知道Flex Builder是否做了這種優化,因爲我記得至少在舊版本的嵌入式PNG中沒有任何優化。

不過,如果你正在尋找一個工具,可以在主權財富基金優化嵌入式圖像,你應該檢查出JOA艾伯特的「減速」:使用http://blog.joa-ebert.com/2009/08/08/reducer/

+0

感謝您的回答。 我知道在Flash IDE中的PNG壓縮。但是AFAIK只適用於Flash IDE而不適用於Flex。 我也知道Joa Ebert的Reducer ...但我仍然想知道爲什麼編譯後的SWF文件大小基本上與兩個圖像相同(只有幾個字節) – bummzack 2010-07-01 19:34:31

+0

我也想知道同樣的事情。我通過減小量化表的大小來優化PNG。結果swfs給出了類似的文件大小。 – 2013-12-12 07:04:39