呃呃呃……需求的来源又是同学,对!又是!
废话不哆嗦,怎么把一张图在iOS上转一个Base64String出来,稍微了解的,或者随便搜一下,都能搞定一大堆,但是!!!!
自己(iOS)转自己用,完全没问题,但是当你需要和安卓、web端一起用的时候,事情就爆炸了,你可能会发现自己转出的Base64String和别人的不一样,你以为人家错了,可是人家转出来的都一样!!!!!
事情完全不怪你,主要是因为UIImage类,这个类会悄悄地对你读进来的图片进行加工,具体干了啥,我也不知道,但是我知道这步加工会导致你出错,所以类似下面的方法都不可以。
UIImage * img = [UIImage imageNamed:@"test.jpg"];
NSData * data = UIImageJPEGRepresentation(img, 1.0f);
NSString * str = [data base64Encoding];
//base64Encoding首先是这个方法可能即将被苹果废掉,其次,转出的字符串其他平台搞不定
NSString * str2 = [data base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
//这一次,方法对了,注意Options的参数NSDataBase64Encoding76CharacterLineLength,需要选这一个,不幸的的是,还是没法用,因为data的来源是UIImage。
那么到底该怎么办?,答案很简单,不走UIImage,所以下面这一句可以搞定!
NSString *Str = [[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"test.jpg" ofType:nil]] base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
拆开是这样的:
NSString *path = [[NSBundle mainBundle]pathForResource:@"test" ofType:@"jpg"];//图片路径
NSData * data = [NSData dataWithContentsOfFile:path];//所以这里你可以换成网络路径,如下
NSURL * url = [NSURL URLWithString:@"your url string"];//url
NSData * data2 = [NSData dataWithContentsOfURL:url];
NSString * str = [data base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];//str 华丽丽的诞生了
综上所述:data的来源很重要,所以尽可能用路径,但是你的需求非得从UIImage中获取data怎么办?
也有办法,先写入文件,再从文件读取data,这可不是脱裤子放屁--找麻烦,简单解释下:
Q:为什么UIImage获取的data转出的Base64String不行?
A:因为UIImage改变了图片的data。
Q:那么写回文件会还原数据么?
A:不会!
Q:那写回去有个P用?!!!
A:道理很简单,虽然写回去的data和原来的data不同了,但是这时候它是一张标准的图了,而不是一个UIImage对象,再从这里获取data,又是标准的图片的data。所以就可以了。
好了 ,上类!!!下载地址:http://files.cnblogs.com/files/kongkaikai/GetImgBase64String.zip
使用方法简直是太简单了!!!!,不解释!!!
NSString * str = [GetImgBase64String getImgBase64StringWithImgFilePath:[[NSBundle mainBundle]pathForResource:@"a" ofType:@"png"]];
NSString * str2 = [GetImgBase64String getImgBase64StringWithImg:[UIImage imageNamed:@"test.jpg"]];
NSString * str3 = [GetImgBase64String getImgBase64StringWithImg:[UIImage imageNamed:@"test.jpg"] Ratio:0.7];
4 //你要是不引入.h,我保证不打死你!!!!!
5 //至于为什么我不写一个知己ImgName,然后把[[NSBundle mainBundle]pathForResource:@"a" ofType:@"png"]自己搞定一遍是怕你随便找个名字就乱用!!!
iOS获取图片的Base64String,兼容Android,java,web,jpg(jpeg),png的更多相关文章
-
IOS, Android, Java Web Rest : RSA 加密和解密问题
IOS, Android, Java Web Rest : RSA 加密和解密问题 一对公钥私钥可以使用 OpenSSL创建, 通常 1024位长度够了. 注意: 1. 公钥私钥是BASE64编码的 ...
-
Android+Java Web+MySQL实现登录注册
1 前言&概述 这篇文章是基于此处文章的更新,更新了一些技术栈,更加贴近实际需要,以及修复了若干的错误. 这是一个前端Android+后端Java/Kotlin通过Servelt进行后台数据库 ...
-
Android获取图片实际大小兼容平板电脑
项目中有个图片在平板电脑中显示特别小的原因.一直苦于没找到原因,也没有平板电脑測试,今天找了个改动分辨率的,编写相关方法最终处理了,记录下比較: 好让以后不造*. 主要是获取文章相关图片显示问题.直 ...
-
iOS获取图片格式
我们系统使用的一般文件格式有png.jpg.jpeg.GIF.TIFF 等格式: 图片是我们开发过程中最常见的东西,一般每个公司都会有自己的文件服务器,客户端人员都会从文件服务器中获取相关的图片信息: ...
-
iOS中图片拉伸,类似Android中的点9图片
UIImage* img=[UIImage imageNamed:@"name.png"];//原图 UIEdgeInsets edge=UIEdgeInsetsMake(, , ...
-
iOS:获取图片Alpha图片
-(void)createImages { // Load the alpha image, which is just the same Ship.png image used in the cli ...
-
iOS 获取图片某一点的颜色对象(UIColor*)。
- (UIColor *)colorAtPixel:(CGPoint)point { // Cancel if point is outside image coordinates if (!CGRe ...
-
Android ListView从网络获取图片及文字显示
上一篇文章说的是ListView展示本地的图片以及文本,这一篇说一下如何从网络获取图片以及文本来显示.事实上,一般是先获取Josn或sml数据,然后解释显示.我们先从网上获取xml,然后对其进行解析, ...
-
UIImagePickerController从拍照、图库、相册获取图片
iOS 获取图片有三种方法: 1. 直接调用摄像头拍照 2. 从相册中选择 3. 从图库中选择 UIImagePickerController 是系统提供的用来获取图片和视频的接口: 用UIImage ...
随机推荐
-
.Net GridView 序号列
给GridView增加一列:序号列 <asp:TemplateField HeaderText="序号"> <ItemTemplate> <%# (( ...
-
DSP using MATLAB 示例Example3.23
代码: % Discrete-time Signal x1(n) : Ts = 0.0002 Ts = 0.0002; n = -25:1:25; nTs = n*Ts; x1 = exp(-1000 ...
-
cocos2d Slider 透明滑动部件无法生成解决办法
用cocos studio 2.3.2 制作声音大小控制滑条的时候遇到了一个奇葩bug我把透明图片和其它资源打包到合图里面然后到到cocos stdudio里面 那张透明图片变成了只有一个像素的点,最 ...
-
[Cocos2d-x For WP8]Particle粒子系统
在游戏中,经常要实现一些真实的效果,这些效果(如,火焰,雪花等)都是由大量微粒组合而形成的.为了在游戏中实现这种效果,我们必须引进粒子系统,粒子系统中需要包括四个部分:粒子对象,运动规律,随机性,粒子 ...
-
框架中的HTML DOM Event 对象
js中的this上下文会因事件而转换成html dom对象. 所以就有这样获取当前触发事件的dom对象: window.event.srcElement || window.event.target; ...
-
Ruby安装和简介
Ruby下载地址:https://www.ruby-lang.org/zh_cn/downloads/ 我安装的是RubyInstaller.it is a self-contained Window ...
-
qcow2、raw、vmdk等镜像格式
转自 http://www.prajnagarden.com/?p=248 http://blog.csdn.net/starshine/article/details/8179483 转者言:对pr ...
-
Postman插件使用
Postman插件:模拟前端请求后台,用于后台对外接口测试 POSTMAN解决..先解压Postman_v4.1.3.rar 然后按自己实际解压的文件夹里面的这个文件夹_metadata前面的_去掉 ...
-
线程使用中常见的错误-“System.InvalidOperationException”线程间操作无效: 从不是创建控件“ ”的线程访问它。
“System.InvalidOperationException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生 其他信息: 线程间操作无效: 从不是创建控件“la ...
-
完美的mysql备份脚本
转自:https://www.cnblogs.com/leffss/p/7832047.html #!/bin/bash #全备方式,一般在从机上执行,适用于小中型mysql数据库 #删除15天以前备 ...