代码之家  ›  专栏  ›  技术社区  ›  davbryn

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

  •  2
  • davbryn  · 技术社区  · 15 年前

    我继承了一个项目,该项目在某个时候创建了一个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?|
    

    腐败的:

    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本身导致了这个问题?

    如果有帮助,以下是创建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];
    

    如有任何建议,请垂询:-)

    2 回复  |  直到 15 年前
        1
  •  4
  •   Glorfindel Doug L.    5 年前

    除了Noah的answer,Xcode还压缩PNG文件:

    Xcode Build Settings

    这也许值得一试 COMPRESS_PNG_FILES = NO 在目标信息窗口中。

        2
  •  1
  •   Noah Witherspoon    15 年前