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

简介: 我们直接在.m文件的引用头文件部分 和 @interface   AddPictureViewController ()  之间  加入 增加部分的代码 然后就可以使用图片转Base64了 #import "AddPictureViewController.

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

 之间  加入 增加部分的代码

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

#import "AddPictureViewController.h"

#import <QuartzCore/QuartzCore.h>

#import <QuartzCore/CoreAnimation.h>

#import <MobileCoreServices/UTCoreTypes.h>

  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];

  

 

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

编码部分的方法如下

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

 

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

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

 

目录
相关文章
|
17天前
|
安全 Android开发 iOS开发
探索安卓与iOS开发的差异:平台特性与用户体验的深度对比
在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。本文旨在通过数据驱动的分析方法,深入探讨这两大操作系统在开发环境、用户界面设计及市场表现等方面的差异。引用最新的行业报告和科研数据,结合技术专家的观点,本文将提供对开发者和市场分析师均有价值的洞见。
|
4天前
|
开发工具 Android开发 iOS开发
探索Android与iOS开发的差异与挑战
【7月更文挑战第11天】在移动应用开发的广阔天地中,Android和iOS两大平台如同双子星座般耀眼,各自拥有独特的开发生态和用户群体。本文将深入分析这两个平台的显著差异,从技术架构到开发工具,再到市场定位,揭示它们之间的异同。通过比较,我们不仅能够更好地理解各自的优势和局限,还能洞察未来移动应用开发的趋势。
|
7天前
|
Java Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【7月更文挑战第8天】在移动应用开发的广阔天地中,Android与iOS两大平台各自占据着半壁江山。本文将深入探讨这两个平台在开发环境、用户界面设计、性能优化以及市场覆盖等方面的根本差异,并分析这些差异如何影响项目的成功。通过比较和分析,旨在为开发者在选择平台时提供更全面的视角,帮助他们根据项目需求和目标市场做出更明智的决策。
|
2天前
|
前端开发 开发工具 Swift
学习iOS开发的准备
准备学习iOS开发?确保有Mac和最新Xcode,先学好编程基础特别是Swift。利用Apple官方文档、在线课程和书籍作为资源。熟悉Xcode及Git,通过实践项目和开源代码积累经验。深研架构模式、核心框架和优化技巧。加入开发者社区,关注行业动态,持续学习。
14 1
|
8天前
|
开发工具 Swift iOS开发
探索iOS开发中的SwiftUI框架
【7月更文挑战第7天】在iOS应用开发的广阔天地中,SwiftUI框架以其现代化的设计理念和强大的功能特性,正逐步改变着开发者构建用户界面的方式。本文将深入探讨SwiftUI的核心概念、优势以及在实际项目中的应用,帮助读者理解这一框架如何简化iOS开发流程并提升用户体验。
187 7
|
7天前
|
移动开发 开发工具 Android开发
探索安卓与iOS开发的差异:平台特性与编程实践
【7月更文挑战第8天】在移动开发的广阔天地中,安卓和iOS这两大操作系统各自占据着半壁江山。它们在用户界面设计、系统架构及开发工具上展现出截然不同的特色。本文将深入探讨这两个平台在技术实现和开发生态上的关键差异,并分享一些实用的开发技巧,旨在为跨平台开发者提供有价值的见解和建议。
|
10天前
|
前端开发 编译器 iOS开发
探索iOS开发的未来:SwiftUI和Combine的革新之路
随着苹果不断推动其操作系统的进化,iOS开发领域正经历着一场前所未有的变革。本文将深入分析SwiftUI和Combine框架如何重塑iOS应用的开发流程,通过对比传统MVC模式与现代SwiftUI的差异,揭示Combine响应式编程范式在简化异步代码方面的巨大潜力。文章还将探讨这些技术如何影响开发者的生产力、应用的性能以及最终用户的体验。通过案例分析和数据支持,我们将展望iOS开发的新趋势,并讨论如何在不断变化的技术环境中保持竞争力。
|
16天前
|
iOS开发 开发者 UED
探索iOS开发中的SwiftUI框架
【6月更文挑战第28天】在移动应用开发的海洋中,SwiftUI作为iOS平台的新星,以其声明式语法和灵活性,正引领着界面设计的未来。本文将带你深入理解SwiftUI的核心概念、布局能力以及如何通过它提升开发效率,为开发者们提供一份实操指南,解锁SwiftUI的强大潜力。
187 1
|
19天前
|
监控 Android开发 iOS开发
探索Android与iOS开发的差异:平台、工具和用户体验的比较
【6月更文挑战第25天】在移动应用开发的广阔天地中,Android和iOS两大平台各领风骚,它们在开发环境、工具选择及用户体验设计上展现出独特的风貌。本文将深入探讨这两个操作系统在技术实现、市场定位和用户交互方面的关键差异,旨在为开发者提供一个全景式的视图,帮助他们在面对项目决策时能够更加明智地选择适合自己项目需求的平台。
|
4天前
|
Java 开发工具 Android开发
探索Android与iOS开发的差异与挑战
【7月更文挑战第11天】在移动应用开发的广阔天地中,Android和iOS两大平台各领风骚。本文将深入探讨这两个平台的开发差异,从编程语言、用户界面设计到开发工具等方面进行比较,并分析开发者面临的挑战。通过对比分析,旨在为开发者提供一个全面的视角,帮助他们更好地选择适合自己项目需求的开发平台。
8 0