iOS获取图片的Base64String,兼容Android,java,web,jpg(jpeg),png
呃呃呃……需求的来源又是同学,对!又是!
废话不哆嗦,怎么把一张图在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 ...
随机推荐
- BTrace: DTrace for Java2
BTrace: DTrace for Java… ish 时间 2012-04-24 16:17:55 dtrace.org 原文 http://dtrace.org/blogs/ahl/2012 ...
- bitset使用
17.10使用序列1.2.3.5.8.13.21初始化一个bitset,将这些位置置位.对另一个bitset进行默认初始化,并编写一小段程序将其恰当的位置位. #include<iostream ...
- dbartisan下载地址
http://downloads.embarcadero.com/free/dbartisan
- JDK7 HashMap源码分析
本文基于JDK1.7.0_79的版本进行分析. 注释比较详细. 若有不明白的地方可以指出, 我再进行细化. public class HashMap<K,V> extends Abstra ...
- 一个玩具程序——测试密码强度(pure C)
替人写的C语言作业… 介绍: 程序名称:密码强度检测程序 注释风格:doxygen 测试环境:linux3.6, gcc4.7window7, vs2012 已知问题:1. 算法与参考链接不一致,结果 ...
- Unity3D获取当前键盘按键
获取当前键盘按键,代码如下: using UnityEngine; using System.Collections; public class GetCurrentKey : MonoBehavio ...
- 滚动效果,marquee便签
语法: <marquee></marquee> 例子: <marquee><font size=+3 color=red>Hello, World< ...
- .NET3.5中的高性能 Socket API
转载:http://www.cnblogs.com/TianFang/archive/2007/11/09/954730.html 在 .NET Framework 2.0 版本中,System.Ne ...
- javascript-设置div隐藏
html code: <div class="title"> <ul id="col02_left_title"> <li> ...
- JAVAAPI学习之Calendar类;Calendar类set()、add()、roll()方法区别
JAVAAPI学习之Calendar类 http://blog.csdn.net/myjlvzlp/article/details/8065775(写的很好,清晰易懂) Calendar类set(). ...