博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于图片在内存中的大小(k或者M)
阅读量:7094 次
发布时间:2019-06-28

本文共 1421 字,大约阅读时间需要 4 分钟。

最近在做一个上传图片的功能,但是清晰度不能太低,图片也不能太大,但是计算这块儿就出现了难题。

OSS对尺寸大小有限制,不能超过4096。 我们从相册选择好图片,先判断大小,查了很多资料发现是不对的,计算出来跟在mac或者手机里是不一样的,偏很大,比如这种方法:

image.size.width * image.size*height * 4 / 1024 /1024 = 0.5M我计算出来比实际大了3倍复制代码

还有这种方法:

NSData *data = UIImageJPEGRepresentation(image, 1);(unsigned long)data.length/1024/1024 = 0.5M也是不行,大小跟上面差不多复制代码

找到一个大小计算正确的:

CGFloat imageDataSize = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil].fileSize/1024;//计算出来是kfilePath是图片的路径,比如从照片库拿到的info[UIImagePickerControllerImageURL]的路径,或者从沙盒拿到的路径都可以计算。复制代码

又碰见一个问题,如果分辨率过大,我们要对图片进行缩放,缩放完成之后大小会改变,所以我们还要对图片进行一次计算,但是现在image在内存中,没有路径,我们怎么计算?既然从路径拿到的大小是正确的,那么我们就给它一个路径,存到临时文件夹,计算完大小再删除。

//计算image大小+(CGFloat)getImageTrueSize:(UIImage *)image{    NSData *imgData = UIImageJPEGRepresentation(image, 1.0);    NSFileManager *manager = [NSFileManager defaultManager];    NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpeg",@"123"]; //这里的名字可以随便起,我们计算完就给删掉了    if(![manager fileExistsAtPath:filePath]){        [manager createFileAtPath:filePath contents:imgData attributes:nil];    }else{        [imgData writeToFile:filePath atomically:YES];    }    CGFloat imageDataSize = [manager attributesOfItemAtPath:filePath error:nil].fileSize/1024;    [manager removeItemAtPath:filePath error:nil];    return imageDataSize;}复制代码

转载地址:http://ypsql.baihongyu.com/

你可能感兴趣的文章
Maven插件打包生成可运行bat文件
查看>>
第一天!差点没有遵守我的flag!2017/3/15
查看>>
KVM安装与配置
查看>>
kindeditor使用入门-张国红
查看>>
request.getParameter和request.getAttribute之间的区别
查看>>
Centos7安装Docker
查看>>
mongoDB分片技术
查看>>
AWK介绍和基本用法
查看>>
基于mysql的可视化日志管理——loganalyzer
查看>>
数据库介绍及分类
查看>>
linux用户、组操作笔记
查看>>
金三银四跳槽季,上周刚面试回来后的面试总结
查看>>
【AWS系列】镭速RaySync VS FTP (9)- AWS新加坡到阿里云深圳
查看>>
Ansible自动化运维之Playbook详解及体验(一)
查看>>
100 个网络基础知识普及(下)
查看>>
ubunt 基于deb 配置本地apt 源 分成仅本机使用,局域网使用2种
查看>>
pdf文件怎么修改内容知识介绍
查看>>
#聊聊心得#快速实现远程运维
查看>>
架构设计杂谈-架构设计
查看>>
Linux的学习之路-2019 安装 VMware Workstation Pro
查看>>