ios mac 对照片进行JPEG压缩

1. 在iOS上可以使用 API UIImageJPEGRepresentation 对照片数据进行JPEG压缩;

我们知道iOS其实是MAC OS 的移植,那么MAC上肯定也有相应的JPEG压缩方法;

在mac上了,找了NSImage的API没有发现直接的JPEG压缩方法;

但是有NSBitmapImageRep,下面来测试一下,iOS和MAC上的JPEG压缩是否一致;

2. 首先用iOS 来压缩一张照片

    UIImage *timg = [UIImage imageWithContentsOfFile:@"/Users/cc/Desktop/testiOS/IMG_0420.PNG"];
    for (int i = 0; i <10; i++) {
        NSData *cd = UIImageJPEGRepresentation(timg, (i+1)/10.0f);
        [cd writeToFile:[NSString stringWithFormat:@"/Users/cc/Desktop/testiOS/com%.1f.jpeg",(i+1)/10.0f] atomically:YES];
    }

得到结果:(压缩比0.1~1.0)

3. MAC API对照片进行JPEG压缩

        //参数校验
        if (argc!=4) {
            printf("参数错误,请检测!\n");
            printf("本程序主要是对图片进行JPEG压缩\n");
            printf("示例:./JPEGCompress /xxpath/imgfile /xxpath/out.jpeg 0.4 \n");
            printf("参数一:要压缩的图片;参数二:输出路径;参数三:压缩比0.1~1.0之间\n");

            return -1000;
        }

        NSString *inPath = [NSString stringWithCString:argv[1] encoding:NSUTF8StringEncoding];
        NSString *outPath = [NSString stringWithCString:argv[2] encoding:NSUTF8StringEncoding];
        float compress =  [[NSString stringWithCString:argv[3] encoding:NSUTF8StringEncoding] floatValue];

        NSImage *simg = [[NSImage alloc]initWithContentsOfFile:inPath];
        NSData *imgDt = [simg TIFFRepresentation];
        NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithData:imgDt];
        NSDictionary *imageProps = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:compress] forKey:NSImageCompressionFactor];
        imgDt = [imageRep representationUsingType:NSJPEGFileType properties:imageProps];

        int ret = [imgDt writeToFile:outPath atomically:YES];
        if (ret>0) {
            printf("in: %s\nout: %s\ncompress: %s\nSUCCESS\n",argv[1],argv[2],argv[3]);
        }else
        {
            printf("FAILURE!\n");
        }
        return ret;

得到结果:压缩比(0.1~1.0)

4. 通过上面的结果,可以看出,同样的压缩比,压缩出来的照片大小是一样的;

但是我在比较上面相同大小文件的MD5时发现是不一样的;

所以理论上MAC和iOS上的JPEG压缩是一致的,但并不是完全一致!

测试程序下载!

时间: 2024-08-28 09:48:51

ios mac 对照片进行JPEG压缩的相关文章

iOS 开发之照片框架详解

一. 概要 在 iOS 设备中,照片和视频是相当重要的一部分.最近刚好在制作一个自定义的 iOS 图片选择器,顺便整理一下 iOS 中对照片框架的使用方法.在 iOS 8 出现之前,开发者只能使用 AssetsLibrary 框架来访问设备的照片库,这是一个有点跟不上 iOS 应用发展步伐以及代码设计原则但确实强大的框架,考虑到 iOS7 仍占有不少的渗透率,因此 AssetsLibrary 也是本文重点介绍的部分.而在 iOS8 出现之后,苹果提供了一个名为 PhotoKit 的框架,一个可以

Cocos2d-x iOS Mac环境编译出错 can&#39;t locate file for: -lpng -ljpeg -ltiff -lwebp -lfreetype -lwebsockets -lcurl

在Mac上用Xcode6编译错误,在windows下面Visual Studio 编译没问题,然后查看报错信息: error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: can't locate file for file: -lpng is not an object file (not allowed in a library) 1 error

中文 iOS/Mac 开发博客列表(网址改进)

中文 iOS/Mac 开发博客列表(网址改进) https://github.com/tangqiaoboy/iOSBlogCN 大牛blog: http://blog.devtang.com/ 唐巧 网易微博后台 .猿题库.有道云笔记.粉笔网 http://beyondvincent.com/blog/archives/ 破船 http://onevcat.com/ 王巍 Line 技术领域 :ios+unity3d http://swifter.tips 王巍 swifter 的网站 htt

cocos2dx 3.x fullPathForFilename及isFileExist在ios/mac下与win32下行为不同

一,fullPathForFilename 项目先开发了ios/mac版本,这两天想把win32工程也配好,但遇到了部分资源无法正确找到的问题. 进一步观察发现,对于那些找不到的资源路径,fullPathForFilename将传入的短路径直接原样返回,而不是返回全路径. 查看fullPathForFilename的实现代码,有这样一段: // FIXME: Should it return nullptr ? or an empty string ? // The file wasn't fo

iOS Mac忘记登录密码的4种解决方法

4种方法: 一.使用Apple ID重置用户账户密码 使用这个方法有一个前提 如上图红框,此项必须勾选,否则无法使用Apple ID重置密码.(如果你不记得有没有勾选,则你起码要记得首次启动 OS X 或装有 OS X Lion 或更高版本的全新 Mac 时,你会进入“OS X 设置助理”,其中需要你输入 Apple ID.输入 Apple ID 后,请在“创建您的帐户”阶段选择“允许我的 Apple ID 重设此用户的密码”选项.) 好了,来说下具体实现的方法: 如果您在登录窗口错误输入帐户密

iOS/mac开发的一些知名个人博客

王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒.http://onevcat.com池 建强的博客: 池建强,70后程序员,Blogger.98年毕业,先后就职于洪恩软件.RocketSofeware和用友软件工程公司(后更名为瑞友 科技),现任瑞友科技IT应用研究院副院长.该博客最初每天发送一条Mac技巧,不过目前已经形成了一种技术和人文结合的风格,时而随笔,时而技术.h

iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

这里接着前文<iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)>,主要是干货环节,列举了如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 三. 常用方法的封装 虽然 PhotoKit 的功能强大很多,但基于兼容 iOS 8.0 以下版本的考虑,暂时可能仍无法抛弃 ALAssetLibrary,这时候一个比较好的方案是基于 ALAssetLibrary 和 PhotoKit 封装出一系列模拟系统 Asset 类的自定义类,然后在其中封装好兼容 A

iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

一. 概况 本文接着 iOS 开发之照片框架详解,侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLibrary 封装出通用的方法. 这里引用一下前文中对 PhotoKit 基本构成的介绍: PHAsset: 代表照片库中的一个资源,跟 ALAsset 类似,通过 PHAsset 可以获取和保存资源 PHFetchOptions: 获取资源时的参数,可以传 nil,即使用系统默认值 PHAssetCo

中文 iOS/Mac 开发博客列表

中文 iOS/Mac 开发博客列表 博客地址 RSS地址 OneV's Den http://onevcat.com/atom.xml 破船之家 http://beyondvincent.com/atom.xml NSHipster http://nshipster.cn/feed.xml Limboy 无网不剩 http://feeds.feedburner.com/lzyy 唐巧的技术博客 http://blog.devtang.com/atom.xml Lex Tang http://le