目标 - Zip仅适用于文本文件?

时间:2011-08-18 15:18:42

标签: iphone zip

我正在使用Objective Zip库来解压iPhone中的文件。

所有工作正常,文本文件没有问题没有问题没有问题,文件是正确的。但是压缩的png文件都被破坏了。文件的大小都等于原始文件,但都已损坏。

这是代码:

-(void)installPackageFromZipFile:(NSString *)zipFile
{
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentPaths objectAtIndex:0];

    ZipFile *unzipFile= [[ZipFile alloc] initWithFileName:zipFile mode:ZipFileModeUnzip];
    packageRegisterController *pckReg = [[packageRegisterController alloc] init];

    [unzipFile goToFirstFileInZip];

    NSArray *infos= [unzipFile listFileInZipInfos];

    for (FileInZipInfo *info in infos) 
    {
        NSLog([NSString stringWithFormat:@"File Found in Zip File- %@ Size:%d", info.name, info.length]);


        ZipReadStream *read = [unzipFile readCurrentFileInZip];

        if (![pckReg detectIfFileExists:[documentsDir stringByAppendingPathComponent:info.name]])
        {

            NSMutableData *data = [[NSMutableData alloc] initWithLength:info.length];

            int bytesRead = [read readDataWithBuffer:data];

            [data writeToFile:[documentsDir stringByAppendingPathComponent:info.name] atomically:NO];

            [read finishedReading];


            [data release];

            if ([[NSString stringWithFormat:@"%@",info.name] isEqualToString:@"TEMAMANIFEST.xml"])
            {
                if([self parseManifest:[documentsDir stringByAppendingPathComponent:info.name]])
                    if ([pckReg validateManifestId:self.temaToInstall.idManifest])
                        [self installManifest];

            }

        }
        [unzipFile goToNextFileInZip];
    }

    [unzipFile close];
    [unzipFile release];
}

此函数解压缩所有大小合适的文件,文本文件正常,但不是png。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

您是在尝试查看iPhone应用中的图片,还是在试图将它们拉链,在Mac上解压缩并尝试在那里查看?

为iPhone构建时,PNG是“优化的”,因此在没有“未经优化”的情况下无法在Mac上查看。

当PNG被复制到iPhone应用程序包时,它们将通过pngcrush实用程序发送,该实用程序获取图像的Alpha通道值,并将其与其他颜色通道(红色,蓝色和绿色)进行预乘。结果是Mac上的图像不可见,但iPhone上的图像速度快,易于渲染。

这样做是因为iPhone的图形处理器不会在硬件中进行alpha乘法,而是在软件中进行,这会使它变慢。 pngcrush实用程序执行构建过程中所需的所有alpha乘法,以便硬件图形处理器可以非常快速地渲染所有图像。