IOS开发---菜鸟学习之路--(十六)-将Image转换为Base64
2024-09-04 17:57:24
我们直接在.m文件的引用头文件部分 和 @interface AddPictureViewController ()
之间 加入 增加部分的代码
然后就可以使用图片转Base64了
#import "AddPictureViewController.h"
#import <QuartzCore/QuartzCore.h>
#import <QuartzCore/CoreAnimation.h>
#import <MobileCoreServices/UTCoreTypes.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
增加部分的代码
@interface AddPictureViewController ()
@end
具体的转换操作如下
NSData *mydata=UIImageJPEGRepresentation(image , 0.4);
NSString *pictureDataString=[mydata base64Encoding];
如果需要传递到后台的话尽量进行编码操作
编码部分的方法如下
- (NSString*)encodeURL:(NSString *)string
{
NSString *newString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes( kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"),kCFStringEncodingUTF8));
if (newString) {
return newString;
}
return @"";
}
encodeURL
然后我们只需要像这样子使用就可以了
-(void)zhuanhuan:(id)sender
{
NSData *mydata=UIImageJPEGRepresentation(contentimageview.image , 0.4);
NSString *pictureDataString=[mydata base64Encoding];
NSString *image=[self encodeURL:pictureDataString];
// NSLog(pictureDataString);
}
这边再给大家提供一个在线转换工具大家可以直接在上面进行Image与Base64之间的转换
http://www.vgot.net/test/image2base64.php
最新文章
- 理解ThreadLocal —— 一个map的key
- SQL SERVER 数据库各版本功能对比
- How to make a not-so-boring speech?
- Lua模块
- logstash 配置 logstash-forwarder (前名称:lumberjack)
- 一次简单的绕过apk签名校验
- 想要隐藏navigationBar,同时又想支持右滑返回功能
- 判断 ACdream 1202 Integer in C++
- sharepoint2010无法创建网站集
- IntegerCache详解
- Codeforces 335B Palindrome
- Array数组方法的总结
- JAVAEE——BOS物流项目03:学习计划、messager、menubutton、登陆拦截器、信息校验和取派员添加功能
- Ajax跨域请求,无法传递及接收cookie信息
- w3wp.exe(IIS ) CPU 占用 100% 的常见原因
- df.dropna()函数和df.ix(),df.at(),df.loc()
- Maven系列--setting.xml 配置详解
- csu 1592(区间DP)
- spring数据源、数据库连接池
- 04_Storm编程上手_WordCount集群模式运行