IOS开发---菜鸟学习之路--(十六)-将Image转换为Base64

我们直接在.m文件的引用头文件部分 和 @interface   AddPictureViewController ()

 之间  加入 增加部分的代码

然后就可以使用图片转Base64了

#import "AddPictureViewController.h"

#import <QuartzCore/QuartzCore.h>

#import <QuartzCore/CoreAnimation.h>

#import <MobileCoreServices/UTCoreTypes.h>

IOS开发---菜鸟学习之路--(十六)-将Image转换为Base64
  1 @interface NSData (MBBase64)

  2 

  3 + (id)dataWithBase64EncodedString:(NSString *)string;

  4 - (NSString *)base64Encoding;

  5 

  6 @end

  7 static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

  8 

  9 @implementation NSData (MBBase64)

 10 

 11 + (id)dataWithBase64EncodedString:(NSString *)string {

 12     if (string == nil)

 13         [NSException raise:NSInvalidArgumentException format:@""];

 14     

 15     if ([string length] == 0)

 16         return [NSData data];

 17     

 18     static char *decodingTable = NULL;

 19     

 20     if (decodingTable == NULL) {

 21         decodingTable = malloc(256);

 22         if (decodingTable == NULL)

 23             return nil;

 24         memset(decodingTable, CHAR_MAX, 256);

 25         NSUInteger i;

 26         for (i = 0; i < 64; i++)

 27             decodingTable[(short)encodingTable[i]] = i;

 28     }

 29     

 30     const char *characters = [string cStringUsingEncoding:NSASCIIStringEncoding];

 31     if (characters == NULL)

 32         return nil;

 33     char *bytes = malloc((([string length] + 3) / 4) * 3);

 34     if (bytes == NULL)

 35         return nil;

 36     

 37     NSUInteger length = 0;

 38     NSUInteger i = 0;

 39     

 40     while (YES) {

 41         char buffer[4];

 42         short bufferLength;

 43         for (bufferLength = 0; bufferLength < 4; i++) {

 44             if (characters[i] == '\0')

 45                 break;

 46             if (isspace(characters[i]) || characters[i] == '=')

 47                 continue;

 48             buffer[bufferLength] = decodingTable[(short)characters[i]];

 49             if (buffer[bufferLength++] == CHAR_MAX) {

 50                 free(bytes);

 51                 return nil;

 52             }

 53         }

 54         

 55         if (bufferLength == 0)

 56             break;

 57         if (bufferLength == 1) {

 58             free(bytes);

 59             return nil;

 60         }

 61         

 62         bytes[length++] = (buffer[0] << 2) | (buffer[1] >> 4);

 63         if (bufferLength > 2)

 64             bytes[length++] = (buffer[1] << 4) | (buffer[2] >> 2);

 65         if (bufferLength > 3)

 66             bytes[length++] = (buffer[2] << 6) | buffer[3];

 67     }

 68     

 69     realloc(bytes, length);

 70     return [NSData dataWithBytesNoCopy:bytes length:length];

 71 }

 72 

 73 - (NSString *)base64Encoding {

 74     if ([self length] == 0)

 75         return @"";

 76     

 77     char *characters = malloc((([self length] + 2) / 3) * 4);

 78     if (characters == NULL)

 79         return nil;

 80     

 81     NSUInteger length = 0;

 82     NSUInteger i = 0;

 83     

 84     while (i < [self length]) {

 85         char buffer[3] = {0,0,0};

 86         short bufferLength = 0;

 87         while (bufferLength < 3 && i < [self length])

 88             buffer[bufferLength++] = ((char *)[self bytes])[i++];

 89         characters[length++] = encodingTable[(buffer[0] & 0xFC) >> 2];

 90         characters[length++] = encodingTable[((buffer[0] & 0x03) << 4) | ((buffer[1] & 0xF0) >> 4)];

 91         if (bufferLength > 1)

 92             characters[length++] = encodingTable[((buffer[1] & 0x0F) << 2) | ((buffer[2] & 0xC0) >> 6)];

 93         else characters[length++] = '=';

 94         if (bufferLength > 2)

 95             characters[length++] = encodingTable[buffer[2] & 0x3F];

 96         else characters[length++] = '=';

 97     }

 98     

 99     return [[NSString alloc] initWithBytesNoCopy:characters length:length encoding:NSASCIIStringEncoding freeWhenDone:YES] ;

100 }

101 

102 @end
增加部分的代码

@interface   AddPictureViewController ()

@end

具体的转换操作如下

 NSData *mydata=UIImageJPEGRepresentation(image , 0.4);

 NSString *pictureDataString=[mydata base64Encoding];

  

 

如果需要传递到后台的话尽量进行编码操作

编码部分的方法如下

IOS开发---菜鸟学习之路--(十六)-将Image转换为Base64
1 - (NSString*)encodeURL:(NSString *)string

2 {

3     NSString *newString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes( kCFAllocatorDefault, (CFStringRef)string, NULL, CFSTR(":/?#[]@!$ &'()*+,;=\"<>%{}|\\^~`"),kCFStringEncodingUTF8));

4     if (newString) {

5         return newString;

6     }

7     return @"";

8 }
encodeURL

 

然后我们只需要像这样子使用就可以了

IOS开发---菜鸟学习之路--(十六)-将Image转换为Base64
1 -(void)zhuanhuan:(id)sender

2 {

3     NSData *mydata=UIImageJPEGRepresentation(contentimageview.image , 0.4);

4     NSString *pictureDataString=[mydata base64Encoding];

5     NSString *image=[self encodeURL:pictureDataString];

6    // NSLog(pictureDataString);

7 }
View Code

 

 

这边再给大家提供一个在线转换工具大家可以直接在上面进行Image与Base64之间的转换

http://www.vgot.net/test/image2base64.php

 

你可能感兴趣的:(base64)