本文基本全部都是代码

首先是.H文件

 #import <Foundation/Foundation.h>

 @interface Base64AndImageHelp : NSObject
- (NSString*)encodeURL:(NSString *)string;
+(id)mydataWithBase64EncodedString:(NSString *)string ;
@end

Base64AndImageHelp.h

然后是.M文件

 #import "Base64AndImageHelp.h"
@interface NSData (MBBase64) + (id)dataWithBase64EncodedString:(NSString *)string;
- (NSString *)base64Encoding; @end
static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; @implementation NSData (MBBase64) + (id)dataWithBase64EncodedString:(NSString *)string {
if (string == nil)
[NSException raise:NSInvalidArgumentException format:@""]; if ([string length] == )
return [NSData data]; static char *decodingTable = NULL; if (decodingTable == NULL) {
decodingTable = malloc();
if (decodingTable == NULL)
return nil;
memset(decodingTable, CHAR_MAX, );
NSUInteger i;
for (i = ; i < ; i++)
decodingTable[(short)encodingTable[i]] = i;
} const char *characters = [string cStringUsingEncoding:NSASCIIStringEncoding];
if (characters == NULL)
return nil;
char *bytes = malloc((([string length] + ) / ) * );
if (bytes == NULL)
return nil; NSUInteger length = ;
NSUInteger i = ; while (YES) {
char buffer[];
short bufferLength;
for (bufferLength = ; bufferLength < ; i++) {
if (characters[i] == '\0')
break;
if (isspace(characters[i]) || characters[i] == '=')
continue;
buffer[bufferLength] = decodingTable[(short)characters[i]];
if (buffer[bufferLength++] == CHAR_MAX) {
free(bytes);
return nil;
}
} if (bufferLength == )
break;
if (bufferLength == ) {
free(bytes);
return nil;
} bytes[length++] = (buffer[] << ) | (buffer[] >> );
if (bufferLength > )
bytes[length++] = (buffer[] << ) | (buffer[] >> );
if (bufferLength > )
bytes[length++] = (buffer[] << ) | buffer[];
} realloc(bytes, length);
return [NSData dataWithBytesNoCopy:bytes length:length];
} - (NSString *)base64Encoding {
if ([self length] == )
return @""; char *characters = malloc((([self length] + ) / ) * );
if (characters == NULL)
return nil; NSUInteger length = ;
NSUInteger i = ; while (i < [self length]) {
char buffer[] = {,,};
short bufferLength = ;
while (bufferLength < && i < [self length])
buffer[bufferLength++] = ((char *)[self bytes])[i++];
characters[length++] = encodingTable[(buffer[] & 0xFC) >> ];
characters[length++] = encodingTable[((buffer[] & 0x03) << ) | ((buffer[] & 0xF0) >> )];
if (bufferLength > )
characters[length++] = encodingTable[((buffer[] & 0x0F) << ) | ((buffer[] & 0xC0) >> )];
else characters[length++] = '=';
if (bufferLength > )
characters[length++] = encodingTable[buffer[] & 0x3F];
else characters[length++] = '=';
} return [[NSString alloc] initWithBytesNoCopy:characters length:length encoding:NSASCIIStringEncoding freeWhenDone:YES] ;
} @end
@implementation Base64AndImageHelp
- (NSString*)encodeURL:(NSString *)string
{
NSString *newString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes( kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"),kCFStringEncodingUTF8));
if (newString) {
return newString;
}
return @""; }
+ (id)mydataWithBase64EncodedString:(NSString *)string {
if (string == nil)
[NSException raise:NSInvalidArgumentException format:@""]; if ([string length] == )
return [NSData data]; static char *decodingTable = NULL; if (decodingTable == NULL) {
decodingTable = malloc();
if (decodingTable == NULL)
return nil;
memset(decodingTable, CHAR_MAX, );
NSUInteger i;
for (i = ; i < ; i++)
decodingTable[(short)encodingTable[i]] = i;
} const char *characters = [string cStringUsingEncoding:NSASCIIStringEncoding];
if (characters == NULL)
return nil;
char *bytes = malloc((([string length] + ) / ) * );
if (bytes == NULL)
return nil; NSUInteger length = ;
NSUInteger i = ; while (YES) {
char buffer[];
short bufferLength;
for (bufferLength = ; bufferLength < ; i++) {
if (characters[i] == '\0')
break;
if (isspace(characters[i]) || characters[i] == '=')
continue;
buffer[bufferLength] = decodingTable[(short)characters[i]];
if (buffer[bufferLength++] == CHAR_MAX) {
free(bytes);
return nil;
}
} if (bufferLength == )
break;
if (bufferLength == ) {
free(bytes);
return nil;
} bytes[length++] = (buffer[] << ) | (buffer[] >> );
if (bufferLength > )
bytes[length++] = (buffer[] << ) | (buffer[] >> );
if (bufferLength > )
bytes[length++] = (buffer[] << ) | buffer[];
} realloc(bytes, length);
return [NSData dataWithBytesNoCopy:bytes length:length];
}
@end

Base64AndImageHelp.m

完成该类后就可以在其他类中使用了

NSData *newimage=[Base64AndImageHelp mydataWithBase64EncodedString:base64的STRING];

UIImage *newjiaban=[[UIImage alloc] initWithData:newimage];

ok这样就完成拉

IOS开发---菜鸟学习之路--(十四)-将BASE64图片转换成Image的更多相关文章

  1. IOS开发---菜鸟学习之路--(四)-登陆界面

    本篇的内容其实大家 参照橘子的那本开发的书的话  上面讲解的是更详细的 一些实现. 我这边唯一的区别就是 做了网络数据的获取 以及 验证成功后 进行界面的跳转.. 第四篇了 本篇主讲登陆模块 首先先放 ...

  2. IOS开发---菜鸟学习之路--(二十二)-近期感想以及我的IOS学习之路

    在不知不觉当中已经写了21篇内容 其实一开始是没有想些什么东西的 只是买了Air后 感觉用着挺舒服的,每天可以躺在床上,就一台笔记本,不用网线,不用电源,不用鼠标,不用键盘,干干脆脆的就一台笔记本. ...

  3. IOS开发---菜鸟学习之路--(一)

    PS(废话): 看了那么多的博客文章,发现大部分人都一直在强调写技术博客的重要性,索性自己也耐着性子写写看吧. 写博客的重要性之类的说明,我就不做复制黏贴的工作了.因为自己没有写过多少,所也不清楚是不 ...

  4. IOS开发---菜鸟学习之路--(二十三)-直接利用键值对的方式来处理数据的感想

    首先声明,本文纯粹只是做为本人个人新手的理解.文中的想法我知道肯定有很多地方是错的. 但是这就是我作为一个新人的使用方法,对于大牛非常欢迎指导,对于喷子请绕道而行. 由于这是早上跟我学长讨论数据处理时 ...

  5. IOS开发---菜鸟学习之路--(十七)-利用UITableView实现个人信息界面

    首先来看下我们要实现的效果 需要实现这样的效果 然后我们开始动手吧. 首先选择添加一个新的ViewController 然后打开XIB文件,添加一UITableView 并将样式设置为分组 同时将按住 ...

  6. IOS开发---菜鸟学习之路--(二)-数据获取

    第二篇了. 本篇要讲的是数据获取. 为什么将数据获取放在第二篇就讲呢? 因为我在看别人教程的时候都是先讲控件的属性,然后怎么用控件开始. 可是毕竟咱们也是有一定开发经验的人..所以很自然就想先知道怎么 ...

  7. IOS开发---菜鸟学习之路--(二十四)-iOS7View被导航栏遮挡问题的解决

    (此文为复制帖,原文地址为:http://blog.sina.com.cn/s/blog_a8192bdd0101af40.html) self.navigationController.naviga ...

  8. IOS开发---菜鸟学习之路--(二十)-二维码扫描功能的实现

    本章将讲解如何实现二维码扫描的功能 首先在github上下载ZBar SDK地址https://github.com/bmorton/ZBarSDK 然后将如下的相关类库添加进去 AVFoundati ...

  9. IOS开发---菜鸟学习之路--(十九)-利用NSUserDefaults存储数据

    利用NSUserDefaults的可以快速的进行本地数据存储,但是支持的格式有限, 至于支持什么格式大家可以再自行脑补 我这边直接讲如何使用 NSUserDefaults 分为两部分 一个是存数据 N ...

随机推荐

  1. mui的ajax例子1

    mui.ajax()方法,get请求 前端页面: <!DOCTYPE html><html><head> <meta charset="utf-8& ...

  2. redis---安全设置

    redis的安全性是通过设置口令来实现的. 首先打开redis的配置文件,我的是在/etc/redis/redis.conf,个人的路径可能会有不同,可以自行查找. 打开redis.conf文件以后, ...

  3. Alembic基本使用

    1.alembic init YOUR_ALEMBIC_DIR 该目录下会有alembic.ini以及YOUR_ALEMBIC_DIR的目录. alembic.ini 提供了一些基本的配置 YOUR_ ...

  4. 利用binlog2sql解析mysqlbinlog row行日志

    binlog2sql 项目作者:曹单锋 github项目地址:https://github.com/danfengcao/binlog2sql 也可在github.com上搜索“binlog2sql” ...

  5. 自行解决12306页面显示异常的问题(长城宽带下WWW。12306无法正常使用)

    前二天突然发现家里所用的长城宽带的www.12306.cn无法正常显示,点击余票查询或者车票预订均打不开,加载时间非常长,现象好似CSS等资源文件未载入成功(如图所示)更换chrome.firefox ...

  6. [转载]AngularJS快速开始

    AngularJS快速开始 Hello World! 开始学习AngularJS的一个好方法是创建经典应用程序“Hello World!”: 使用您喜爱的文本编辑器,创建一个HTML文件,例如:hel ...

  7. 【BZOJ1059】[ZJOI2007] 矩阵游戏(匈牙利算法)

    点此看题面 大致题意: 有一个\(N*N\)的\(01\)矩阵,可以任意交换若干行和若干列,问是否有方案使得左上角到右下角的连线上全是\(1\). 题意转换 首先,让我们来对题意进行一波转化. 如果我 ...

  8. Python实现进度条小程序

    一.print()参数介绍 1.end:指定打印结束后添加的字符,默认值为换行符 for j in range(3): print('hello world') for i in range(3): ...

  9. PageHelper 记录总条数不正确问题处理

    //PageHelper.startPage会返回一个page对象,这个对象在查询结果出来后会把页数,记录总数给page对象,用page.getPages()和getTotal()获取页数和记录总数. ...

  10. Ubuntu 上配置静态的ip

    先关掉或卸掉 network-manager.然后,改动/etc/network/interfaces 如下:(由于是静态ip,你当然知道把例子中那些东西改成你自己的)auto lo eth0ifac ...