将UIImage转换为数据URI

And*_*nov 5 uikit data-url uiimage ios ios6

假设我有一个UIImage实例,我想将其转换为数据URI并注入到UIWebView.

我知道我可以NSData使用PNGRepresentation/ JPEGRepresentation方法将UIImage转换为PNG/JPEG .但是,我如何确保转换是base64?然后如何创建一个包含实际URI和标题的字符串?

Dav*_*eck 10

这是我用来做UIImage的一个类别:

- (BOOL)hasAlpha
{
    CGImageAlphaInfo alpha = CGImageGetAlphaInfo(self.CGImage);
    return (alpha == kCGImageAlphaFirst ||
            alpha == kCGImageAlphaLast ||
            alpha == kCGImageAlphaPremultipliedFirst ||
            alpha == kCGImageAlphaPremultipliedLast);
}

- (NSString *)dataURL
{
    NSData *imageData = nil;
    NSString *mimeType = nil;

    if (self.hasAlpha) {
        imageData = UIImagePNGRepresentation(self);
        mimeType = @"image/png";
    } else {
        imageData = UIImageJPEGRepresentation(self, 1.0);
        mimeType = @"image/jpeg";
    }

    return [NSString stringWithFormat:@"data:%@;base64,%@", mimeType, [imageData base64EncodedStringWithOptions:0]];
}
Run Code Online (Sandbox Code Playgroud)

这要求iOS 7将数据编码为base64,但是有第三方库可以做同样的事情.


小智 1

用它创建 NSData 不会以基数 64 进行编码。 NSData 是二进制数据(字节,范围为 0-255);Base 64 编码是一种文本编码,它使用 ASCII 的子集来表示字节值。您需要做的是创建 NSData,然后使用转换例程将其编码为 Base 64 字符串;有很多这样做的参考。获得 base64 字符串后,即可使用标准方法将图像数据插入 HTML。