2

我正在尝试转换UIImageBase64字符串,然后将其发送到 Web 服务 SOAP,然后发送到数据库。

所以,我用我的应用程序选择了一张图片,并尝试用这种方法转换它:

public static string GetBase64FromImage (UIImage picture_)
{
    if (picture_ == null)
        return string.Empty;

    NSData data = picture_.AsJPEG();
    Console.WriteLine("JPEG length: " + data.Length);

    byte[] byteArray = new byte[data.Length];
    System.Runtime.InteropServices.Marshal.Copy(data.Bytes, byteArray, 0, Convert.ToInt32(data.Length));
    string base64 = Convert.ToBase64String(byteArray);
    Console.WriteLine("Base64 length: "+base64.Length);

    return base64;
}

我的意思是图片的总长度。如果我将图片保存在文件系统中并导入它,图片大小大约为 1 Mo。但是用我的方法,JPEG 是它的两倍(几乎 2Mo)。所以我的 Base64 转了 3 个月,这是巨大的。

为什么 JPEG 中的 NSData 大小是“正常”的两倍?

4

1 回答 1

4

JPEG 是一种压缩数据格式。根据您保存图像的方式(到文件、流...),您可以获得不同的结果。

AsJPEG()有一个接受 a 的重载float compressionQuality。如果您不提供值,1.0f则将使用该值(默认情况下)。由于这会调用默认情况下UIImageJPEGRepresentation您将获得最少的压缩(最好的图像但最大的尺寸)。OTOH,如果您提供0.0,您将获得最大压缩(最小尺寸)。

于 2012-11-06T16:26:47.893 回答