我正在尝试将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/