如何使用Xamarin IOS压缩图像但不调整其大小?

如何使用Xamarin IOS压缩图像但不调整其大小?,xamarin,xamarin.ios,Xamarin,Xamarin.ios,我需要将一个相当大的图像上传到服务器,但我想保持纵横比,但压缩文件的大小,因为我正在上载多个文件。如果您不想调整图像的大小,则将其作为JPEG和PNG发送将使其比仅发送位图数据更小。您可以以PNG或JPEG格式获取图像的NSData表示。每种格式都有一些优点/缺点,但JPEG允许牺牲质量来进行更多压缩 *假设您有一个名为image的UIImage using(NSData pngImage = image.AsPNG()){ byte[] imageBytes = pngImage.To

我需要将一个相当大的图像上传到服务器,但我想保持纵横比,但压缩文件的大小,因为我正在上载多个文件。

如果您不想调整图像的大小,则将其作为JPEG和PNG发送将使其比仅发送位图数据更小。您可以以PNG或JPEG格式获取图像的
NSData
表示。每种格式都有一些优点/缺点,但JPEG允许牺牲质量来进行更多压缩

*假设您有一个名为
image
UIImage

using(NSData pngImage = image.AsPNG()){
    byte[] imageBytes = pngImage.ToArray();
    // upload your image data, write to a file, etc.
}

// AsJPEG compression argument can be 0 to 1
// 0 is max compression (lowest quality), 1 is best quality
using(NSData jpgImage = image.AsJPEG(0.0f)){
    byte[] imageBytes = jpgImage.ToArray();
    // upload your image data, write to a file, etc.
}

您还可以在循环中使用
AsJPEG
,并降低压缩值,以尝试使图像大小低于特定阈值。但这可能有点慢,因此您必须为您的特定用途权衡好处。

在问题中,您说保持纵横比,但在标题中,您说不调整大小。您是否愿意在保持纵横比的同时调整图像的大小,使其具有较小的宽度和高度?您可以通过使用
UIImage.AsJPEG()
UIImage.AsPNG()
发送JPG或PNG表示来获得一些压缩,而无需调整大小。调整大小到更小的图像可以节省更多的空间。@VibhaRKedilaya很高兴我能帮忙。很高兴开发。你有没有想法在Xamarin Android中实现同样的功能?我们应该做到这一点。格式参数将为0-100,而不是0-1。您可以使用
MemoryStream
作为流,并将其重新准备为
字节[]