我正在尝试将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比“正常”的两倍大?

最佳答案

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

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

关于c# - UIImage长度与图片长度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13254497/

10-17 01:59