我正在使用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。
有人可以帮助我吗?
答案 0 :(得分:1)
您是在尝试查看iPhone应用中的图片,还是在试图将它们拉链,在Mac上解压缩并尝试在那里查看?
为iPhone构建时,PNG是“优化的”,因此在没有“未经优化”的情况下无法在Mac上查看。
当PNG被复制到iPhone应用程序包时,它们将通过pngcrush
实用程序发送,该实用程序获取图像的Alpha通道值,并将其与其他颜色通道(红色,蓝色和绿色)进行预乘。结果是Mac上的图像不可见,但iPhone上的图像速度快,易于渲染。
这样做是因为iPhone的图形处理器不会在硬件中进行alpha乘法,而是在软件中进行,这会使它变慢。 pngcrush
实用程序执行构建过程中所需的所有alpha乘法,以便硬件图形处理器可以非常快速地渲染所有图像。