IOS开发—图片压缩/解压成Zip文件

图片压缩/解压成Zip文件

本文介绍如何将图片压缩成Zip文件,首先需要下载第三方库ZipArchive 并导入项目中。

ZipArchive 库地址:https://github.com/mattconnolly/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

四:效果演示

点击压缩按钮:

点击解压按钮:

删除按钮:

附:文件请在沙盒中自行查看

时间: 2024-10-14 15:58:57

IOS开发—图片压缩/解压成Zip文件的相关文章

linux ubuntu12.04 解压中文zip文件,解压之后乱码

在windows下压缩后的zip包,在ubuntu下解压后显示为乱码问题 1.zip文件解压之后文件名乱码: 第一步 首先安装7zip和convmv(如果之前没有安装的话) 在命令行执行安装命令如下: sudo apt-get install p7zip-full convmv 第二步 假设zip文件名为y05文档.zip,那么先进入zip文件所在的目录,然后命令行执行 LANG=C 7z x y05文档.zip convmv -f cp936 -t utf8 -r --notest * 2.文

使用zlib解压.apk/.zip文件(Windows&Ubuntu)

前言 前面讲过,解压出apk文件的内容是进行apk分析的第一步,而.apk文件其实就是.zip文件.也就是说首先要实现zip文件的解压缩.本文将分别介绍在Windows和Ubuntu下如何使用zlib这一开源库对zip文件进行解压. ZLIB zlib is designed to be a free, general-purpose, legally unencumbered – that is, not covered by any patents – lossless data-compr

Linux命令-压缩解压命令:zip、unzip

rm -rf * 删除当前目录下面的所有文件,也包括目录和子目录ls cp /etc/services /tmp 复制etc目录下的services文件到tmp目录ls -lhzip services.zip services 压缩services文件,生成services.zip文件ls -lh mkdir -p shijiazhuang/changanqu shijiazhuang/yuhuaqu shijiazhuang/kaifaqu 递归方式创建shijiazhuang的子目录 ls

java压缩解压zip文件,中文乱码还需要ant.jar包

va] view plaincopyprint? package cn.cn; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; i

Linux下的压缩解压命令

1. linux zip命令 压缩 zip -r filename.zip ./*                  // 将当前目录下的所有文件和文件夹全部压缩成 filename.zip文件 -r表示递归压缩子目录下所有文件 解压 unzip -d test filename.zip            // 把filename.zip文件解压到 ./test -d:-d test 指明将文件解压缩到./test目录下: 2. linux tar命令 -c: 建立压缩档案 -x: 解压 -

压缩解压打包工具基础

目录 前言 compress压缩解压工具 gzip压缩解压工具 bzip2压缩解压工具 xz压缩解压工具 zip压缩打包工具 tar打包工具 split文件分割 cpio打包压缩 前言 无论是我们的个人笔记本台式机还是服务器,它们的存储设备可以存储的东西都是有限的,不可能无限的存储东西,除非我们不停地增加硬盘的数量,但是这又是非常不现实的,因为我们需要无限的空间,很多时候我们需要存储大量的不可删除的数据时,就会采用压缩的方式,这样我们就可以即剩下了很多空间同时又保存了我们的文件. 在我们的常用的

Linux学习笔记(7)Linux常用命令之压缩解压命令

(1)gzip gzip命令用于压缩文件,英文原意为GNU zip,所在路径/bin/gzip,其语法格式为: gzip [文件] 压缩后的文件格式为.gz. 例:将/etc目录下的services文件拷贝至/tmp目录,并采用gzip进行压缩. [[email protected] tmp]# cp /etc/services services [[email protected] tmp]# ls services [[email protected] tmp]# gzip services

Linux基本命令—权限管理、文件搜索、帮助、压缩解压、网络通信

Linux基本命令-权限管理.文件搜索.帮助.压缩解压.网络通信 Linux 权限管理命令 文件搜索命令 帮助命令 压缩解压命令 网络通信指令 2017-11-12 权限管理命令 chmod 改变文件或目录权限: 格式:chmod [{ugo} {+-=} {rwx}] [文件或目录]:或 [mode=421] [文件或目录] -u:所有者: -g:所属组: -o:其他人 -rwx:可读可写可执行:对应权值 r-4.w-2.x-1,可按照数字改变权限:eg.rwxr-xr--表示754: eg.

支持文件的流式压缩/解压IP*Works! Zip

IP*Works! Zip是为应用程序添加压缩功能的完全可控件组件包.使用简单.速度快并且效率很高,是一个为桌面和网上应用程序添加压缩和解压缩功能的组件套包./n software IP*Works! Zip支持Zip.Tar.Gzip 和 Jar压缩标准,特别的,它支持流式压缩.加密压缩,在压缩包里就可以直接删除文件.我们目前提供完全可控的纯C# .NET组件.纯Java Beans. 产品特征: IP*Works! Zip基于纯C#代码,是完全可控的.NET组件,不依赖于任何外部代码.是完全