iOS Base64编码(文字/图片)

  Base64 是网络上常见的用于传输8bit字节代码的编码方式之一,可以将二进制转为“字符串”。在应用程序中常常需要把二进制数据编码为适合放在URL中的形式,此时采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼直接看到。

  然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准的Base64中的’/’和’+’字符变为’%XX’的形式,而这些’%’号在存入数据库时还需要再进行转换,因为ANSI SQL中将’%’号用作通配符。为解决此问题,可采用一种用于URL的改进Base64编码,它不仅在末尾去掉填充的‘=‘号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。

  Base64编码本质上是一种将二进制数据转成文本数据的方案。对于非二进制数据,是先将其转换成二进制形式,然后每连续6比特(2的6次方=64)计算其十进制值,根据该值在上面的索引表中找到对应的字符,最终得到一个文本字符串。

  编码“Man”

  标准的Base64索引表如下,另有一个辅助字符’=’用来作为后缀使用

  如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行base64的编码。在编码后的base64文本后加上一个或两个‘=‘号,代表补足的字节数。也就是说,当最后剩余一个八位字节(一个byte)时,最后一个6位的base64字节块有四位是0值,最后附加上两个等号;如果最后剩余两个八位字节(2个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。 参考下表:

  以“迅雷下载”为例: 很多下载类网站都提供“迅雷下载”的链接,其地址通常是加密的迅雷专用下载地址。

其实迅雷的“专用地址”也是用Base64"加密"的,其过程如下:

  1、在地址的前后分别添加AA和ZZ

  2、对新的字符串进行Base64编码

另:Flashget 的与迅雷类似,只不过在第一步时加的“料”不同罢了,Flashget在地址前后加的“料”是[FLASHGET]

而QQ旋风的干脆不加料,直接就对地址进行Base64编码了

方法:

- (NSString *)base64EncodedString {
    NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];
    return [data base64EncodedStringWithOptions:0];
}

- (NSString *)base64DecodedString {
    NSData *data = [[NSData alloc]initWithBase64EncodedString:self options:0];
    return [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
}

对字符进行Base64编解码:

NSString *sourceStr = @"www.baidu.com";
NSLog(@"sourceStr---->%@",sourceStr);

NSString *base64Str = [sourceStr base64EncodedString];
NSLog(@"Base64编码---->%@",base64Str);

NSString *decodeStr = [base64Str base64DecodedString];
NSLog(@"Base64解码---->%@",decodeStr);

/*
 sourceStr---->www.baidu.com
 Base64编码---->d3d3LmJhaWR1LmNvbQ==
 Base64解码---->www.baidu.com
 */

对图片进行Base64编解码:

// UIImage图片转成Base64字符串:
UIImage *img = [UIImage imageNamed:@"0.jpg"];
NSData *imgData = UIImageJPEGRepresentation(img, 1.0f);
NSString *encodedImgStr = [imgData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

NSLog(@"encodedImgStr---->%@",encodedImgStr);

//Base64字符串转UIImage图片:
NSData *decodedImgData = [[NSData alloc] initWithBase64EncodedString:encodedImgStr options:NSDataBase64DecodingIgnoreUnknownCharacters];
UIImage *decodedImage = [UIImage imageWithData:decodedImgData];
UIImageView *imgV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 100, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.width)];
imgV.contentMode = UIViewContentModeScaleAspectFit;
[imgV setImage:decodedImage];
[self.view addSubview:imgV];

NSLog(@"decodedImage---->%@",decodedImgData);

时间: 2024-08-28 06:27:48

iOS Base64编码(文字/图片)的相关文章

浅析用Base64编码的图片优化网页加载速度

想必大家都知道网页加载的过程,从开始请求,到加载页面,开始解析和显示网页,遇到图片就再次向服务器发送请求,加载图片.如果图片很多的话,就会产生大量的http请求,从而影响页面的加载速度.所以现在有一种做法是将多张图片合并到一起,这样在打开页面的时候只需要一次http请求就可以加载多张图片,然后通过设置图片的背景偏移量来正确的显示.现在我们可以将图片转成base64编码,然后直接写在html页面或者css里面,这样在加载页面或者css的时候就可以直接将图片加载过去,这样也省去了设置图片背景偏移量带

iOS.TextKit.02.文字图片混合排版

1.案例如图 2.代码 TextKit02ViewController.h #import <UIKit/UIKit.h> @interface TextKit02ViewController : UIViewController @property (nonatomic,strong) IBOutlet UITextView *textView; @property (nonatomic,weak) IBOutlet UIImageView *imageView; // 文本可以排版的区域

图片流Base64编码 转图片

using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Web; namespace OnlinePhotoCapture {     /// <summary>     /// 将图片base64字符串原还原为图片并调整尺寸后保存(by 菩提树下的杨过http://yjmyzz.cnblogs.com/)       /// </summary>

BASE64编码的图片在网页中的显示问题的解决

BASE64编码的图片在网页中的显示问题的解决 关于图片的Base64编码,你了解吗?

Android开发 - ImageView加载Base64编码的图片

在我们开发应用的过程中,并不是所有情况下都请求图片的URL或者加载本地图片,有时我们需要加载Base64编码的图片.这种情况出现在服务端需要动态生成的图片,比如: 二维码 图形验证码 ... 这些应用场景有个共同点就是,这些图片都是由服务器动态生成,并不需要生成后保存成文件再返回给客户端. Android中ImageView加载Base64图片其实非常简单,并不需要引入第三方库,方法如下: import android.util.Base64; # 代码片段 String base64 = "d

base64编码加密图片和展示图片

base64是当前网络上最为常见的传输8Bit字节代码的编码方式其中之一.base64主要不是加密,它主要的用途是把某些二进制数转成普通字符用于 网络传输.由于这些二进制字符在传输协议中属于控制字符,不能直接传送,所以需要转换一下.虽然图片可能直接传输,但是我们也可以将它变成字符串直接放在 源码里,而不需要浏览器在读取到源码后再从服务器上下载.如何对图片进行base64编码 <?php $file = "./image/index.png"; $type = getimagesi

C#中图片转换为Base64编码,Base64编码转换为图片

#region 图片转为base64编码的字符串 public string ImgToBase64String(string Imagefilename) { try { Bitmap bmp = new Bitmap(Imagefilename); MemoryStream ms = new MemoryStream(); bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); byte[] arr = new byte[ms.Lengt

nodejs抓取网络图片转换为base64编码的图片

抓取网络图片需要加载http模块 //假定这是index.js文件 var http = require('http'); var url = 'http://p0.meituan.net/tuanpic/3df525af5a3f7fe04077567d2a6caf794904.png';  //一张网络图片 http.get(url,function(res){ var chunks = []; //用于保存网络请求不断加载传输的缓冲数据 var size = 0; //保存缓冲数据的总长度

base64编码操作图片

package com.trsmedia.service; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Base64.Encoder; import java.util.Base64; import java.