我正在尝试将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是“普通”的两倍?
答案 0 :(得分:4)
JPEG是一种压缩数据格式。根据您保存图像的方式(文件,流...),您可以得到不同的结果。
AsJPEG()
有一个接受float compressionQuality
的重载。如果您未提供值,则将使用1.0f
(默认值)。由于调用UIImageJPEGRepresentation
,默认情况下您将获得最少压缩(最佳图像但最大尺寸)。 OTOH如果您提供0.0
,您将获得最大压缩(最小尺寸)。