2009-12-08 19 views
2

我已經繼承了一個項目,該項目在某些時候會創建一個zip文件,將一個XML文件添加到該zip文件中,然後向其中添加一些PNG文件存檔。所有在模擬器上都可以正常工作,但是每當我在設備上運行相同的代碼時,生成的png文件在我的Mac上打開時會發生變化,無法打開。libzip在iPhone設備上壓縮時會破壞PNG文件,但不會在模擬器中

它們看起來仍然是png文件,但「損壞」的導出文件比真實文件稍大,而十六進制轉儲文件顯示內容差別很大。頭是依舊保留...

原文:

00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR| 
00000010 00 00 00 6d 00 00 00 75 08 06 00 00 00 44 7d 6f |...m...u.....D}o| 
00000020 a0 00 00 00 19 74 45 58 74 53 6f 66 74 77 61 72 |?....tEXtSoftwar| 
00000030 65 00 41 64 6f 62 65 20 49 6d 61 67 65 52 65 61 |e.Adobe ImageRea| 
00000040 64 79 71 c9 65 3c 00 00 38 32 49 44 41 54 78 da |dyq?e<..82IDATx?| 

損壞:

00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 04 43 67 42 49 |.PNG........CgBI| 
00000010 30 00 20 02 10 f3 44 7c 00 00 00 0d 49 48 44 52 |0. ..?D|....IHDR| 
00000020 00 00 00 6d 00 00 00 75 08 06 00 00 00 44 7d 6f |...m...u.....D}o| 
00000030 a0 00 00 00 19 74 45 58 74 53 6f 66 74 77 61 72 |?....tEXtSoftwar| 
00000040 65 00 41 64 6f 62 65 20 49 6d 61 67 65 52 65 61 |e.Adobe ImageRea| 
00000050 64 79 71 c9 65 3c 00 00 38 65 49 44 41 54 ed bd |dyq?e<..8eIDAT??| 

(我欣賞的文件頭的一小塊是不是非常有幫助,但其目的是表明,腐敗發生在PNG內部,而不是ZIP本身)

所以我想我要問的是,是否有人經歷過這樣的事情?我只是嘗試使用下面的包裝http://www.flyblog.info/catprogramming/202.html並遇到同樣的問題,所以我猜測它的libzip本身造成的問題?

有沒有人有一個簡單的,經過試驗和測試的方法來添加文件到Ipod上的zip文件,我可以嘗試和交換?

如果有幫助,這裏是創建ZIP代碼:

ZipArchive* zip = [[ZipArchive alloc] init]; 

BOOL ret = [zip CreateZipFile2: zipPath]; 
NSMutableSet *imageNames = [NSMutableSet set]; 
[curAlbum collectImageNames:imageNames]; 

for (NSString *imageName in imageNames) { 
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageName ofType:@""]; 
    NSLog(imagePath); 
    ret = [zip addFileToZip:imagePath newname:@"test.png"]; 
} 



[zip release]; 

任何意見讚賞:-)

+0

看起來像http://old.nabble.com/CgBI-error-td19563316.html - 似乎沒有給出解決方案,雖然 – Greg 2009-12-08 13:29:18

回答

4

除了諾亞回答的Xcode也壓縮PNG文件:

Xcode Build Settings http://i49.tinypic.com/2vdqgqh.png

這可能是值得在目標信息窗口設置COMPRESS_PNG_FILES = NO

+0

我的話是一場噩夢 - 這個選項解決了它,雖然很快樂的日子: - )非常感謝(我不確定誰的答案接受爲正確的答案,但遵循這些說明得到了應用程序的排序,因此隨之而來 - 感謝諾亞的迅速答覆) – davbryn 2009-12-08 14:22:40

1

當Xcode中建立了設備的應用程序,它會改變任何PNG資源轉換他們到BGRA(而不是通常的RGBA)並且預乘alpha通道。沒有辦法通過我知道的任何項目設置來防止這種情況;您可以嘗試給您提供的應用程序資源添加一個非「.png」的擴展名,以查看Xcode是否可以在不改變的情況下複製它們。

相關問題