C# UIImage长度与图片长度

C# UIImage长度与图片长度,c#,xamarin.ios,uiimage,base64,jpeg,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.

我正在尝试将
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个月左右。 但是用我的方法,JPEG是它的两倍(几乎是2Mo)。所以我的Base64转了3个月,非常大


为什么JPEG格式的NSData的大小是“普通”格式的两倍?

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


AsJPEG()
具有接受
浮点压缩质量的重载。如果不提供值,将使用
1.0f
(默认值)。由于这将调用,因此默认情况下,您将获得最小的压缩(最佳图像,但最大大小)。o如果您提供
0.0
,您将获得最大压缩(最小大小)。

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


AsJPEG()
具有接受
浮点压缩质量的重载。如果不提供值,将使用
1.0f
(默认值)。由于这将调用,因此默认情况下,您将获得最小的压缩(最佳图像,但最大大小)。o如果您提供
0.0
您将获得最大压缩(最小尺寸)。

谢谢!现在,我的NSData长度约为300Ko,压缩为0.5f。非常感谢。所以,当我们正常拍摄照片时,系统会将其压缩一点(这可以解释双倍长度)?@Gnial0id是的,JPEG可以是无损的(即使压缩),但通常是有损压缩。压缩通常很好,但如果多次加载/更改/保存同一图像,则会出现问题。关于iOS内部默认wrt压缩的一些细节,我不知道有任何文档。谢谢!现在,我的NSData长度约为300Ko,压缩为0.5f。非常感谢。所以,当我们正常拍摄照片时,系统会将其压缩一点(这可以解释双倍长度)?@Gnial0id是的,JPEG可以是无损的(即使压缩),但通常是有损压缩。压缩通常很好,但如果多次加载/更改/保存同一图像,则会出现问题。关于iOS内部默认wrt压缩的一些细节,我不知道有任何文档。