本文介紹如何將圖片壓縮成Zip文件,首先需要下載第三方庫ZipArchive 並導入項目中。
1、框架導入:
2、ZipArchive.m文件使用非ARC機制
// // ViewController.m // UnzipImgDemo // // Created byLotheve on 15/4/10. // Copyright (c)2015年 Lotheve. All rights reserved. // #import ViewController.h #import ZipArchive.h @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imgView; @property (weak, nonatomic) IBOutlet UIButton *zipBtn; @property (weak, nonatomic) IBOutlet UIButton *unzipBtn; @property (weak, nonatomic) IBOutlet UIButton *zipFileDeBtn; @property (weak, nonatomic) IBOutlet UIButton *zipedFiledeBtn; @property (weak, nonatomic) IBOutlet UILabel *statusLabel; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [self downLoadImg]; }
//加載圖片到本地 - (void)downLoadImg{ NSString *URLString = @https://www.baidu.com/img/bdlogo.png; NSURL *URL = [NSURL URLWithString:URLString]; NSData *data = [NSData dataWithContentsOfURL:URL]; NSMutableString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];; NSString *imgPath = [path stringByAppendingPathComponent:@baidu.png]; [data writeToFile:imgPath atomically:YES]; }
//壓縮文件 - (IBAction)zipFile:(id)sender { NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; NSString *imgPath = [cachesPath stringByAppendingPathComponent:@baidu.png]; NSString *zipFilePath = [docsPath stringByAppendingPathComponent:@newZipFile.zip]; //實例化一個壓縮文檔,並創建文件 ZipArchive *za = [[ZipArchive alloc]init]; [za CreateZipFile2:zipFilePath]; //在壓縮文檔中添加文件 [za addFileToZip:imgPath newname:@baidu_zipped.png]; //關閉zip文件操作 BOOL success = [za CloseZipFile2]; if (success) { _statusLabel.text = @壓縮成功; }else{ _statusLabel.text = @壓縮失敗; } }
//解壓文件 - (IBAction)unzipFile:(id)sender { NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; NSString *zipPath = [docsPath stringByAppendingPathComponent:@newZipFile.zip]; ZipArchive *za = [[ZipArchive alloc]init]; //在內存中解壓文件 if ([za UnzipOpenFile:zipPath]) { //將解壓的內容寫到磁盤中 BOOL success = [za UnzipFileTo:docsPath overWrite:YES]; if (!success) { _statusLabel.text = @解壓失敗; }else{ //關閉壓縮文件 [za UnzipCloseFile]; _statusLabel.text = @解壓成功; NSString *imgPath = [docsPath stringByAppendingPathComponent:@baidu_zipped.png]; NSData *data = [NSData dataWithContentsOfFile:imgPath]; UIImage *image = [UIImage imageWithData:data]; _imgView.image = image; } }else{ _statusLabel.text = @壓縮文件不存在; } }
//刪除壓縮文件 - (IBAction)deleteZipFile:(id)sender { NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; NSString *zipPath = [docsPath stringByAppendingPathComponent:@newZipFile.zip]; //創建文件管理器 NSFileManager *fm = [NSFileManager defaultManager]; //判斷指定路徑文件是否存在 BOOL exist = [fm fileExistsAtPath:zipPath]; if (exist) { NSError *error = nil; [fm removeItemAtPath:zipPath error:&error]; if (!error) { _statusLabel.text = @刪除壓縮文件成功; }else{ _statusLabel.text = @刪除壓縮文件失敗; } }else{ _statusLabel.text = @文件不存在; } }
//刪除解壓文件 - (IBAction)deleteZipedFile:(id)sender { NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; NSString *zippedFilePath = [docsPathstringByAppendingPathComponent:@baidu_zipped.png]; NSFileManager *fm = [NSFileManager defaultManager]; BOOL exist = [fm fileExistsAtPath:zippedFilePath]; if (exist) { NSError *error = nil; [fm removeItemAtPath:zippedFilePath error:&error]; if (!error) { _statusLabel.text = @刪除解壓文件成功; _imgView.image = nil; }else{ _statusLabel.text = @刪除解壓文件失敗; } }else{ _statusLabel.text = @文件不存在; } }
@end
點擊壓縮按鈕:
點擊解壓按鈕:
刪除按鈕: