UIImage长度与图片长度

时间:2012-11-06 15:45:00

标签: c# xamarin.ios uiimage base64 jpeg

我正在尝试将UIImage转换为Base64字符串,然后将其发送到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 Mo,这是巨大的。

为什么JPEG中的NSData是“普通”的两倍?

1 个答案:

答案 0 :(得分:4)

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

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