libzip在iPhone设备上压缩时会损坏PNG文件,但在模拟器中不会

libzip在iPhone设备上压缩时会损坏PNG文件,但在模拟器中不会,iphone,png,zip,corruption,Iphone,Png,Zip,Corruption,我继承了一个项目,该项目在某个时候创建了一个zip文件,将一个XML文件添加到zip中,然后将许多PNG文件添加到同一个归档中。所有这些都可以在模拟器上正常工作,但每当我在设备上运行相同的代码时,生成的png文件就会被修改,并且在Mac上打开时不可修改 它们看起来仍然是png文件,但“损坏”的导出文件比真实文件稍大,十六进制转储显示内容差异很大。标题被保留,但 原件: 00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PN

我继承了一个项目,该项目在某个时候创建了一个zip文件,将一个XML文件添加到zip中,然后将许多PNG文件添加到同一个归档中。所有这些都可以在模拟器上正常工作,但每当我在设备上运行相同的代码时,生成的png文件就会被修改,并且在Mac上打开时不可修改

它们看起来仍然是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?|

任何值得赞赏的建议:-

当Xcode为设备构建应用程序时,它会更改任何PNG资源,将它们转换为BGRA,而不是通常的RGBA,并预乘alpha通道。使用我所知道的任何项目设置都无法防止这种情况;您可以尝试为应用程序中包含的资源提供除.png以外的扩展名,以查看Xcode是否会复制它们而不做任何更改。

除了Noah的答案外,Xcode还压缩png文件:


在目标信息窗口中设置COMPRESS\u PNG\u FILES=NO可能是值得的。

看起来-似乎没有给出一个解决方案,虽然我的话是一场噩梦-这个选项解决了它,尽管是如此快乐的日子:-非常感谢,我不确定接受谁的答案是正确的,但按照这些说明对应用程序进行了排序,所以就这样做了-感谢诺亚的迅速回复
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??|
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];