使用xamarin.forms将图像大小压缩为250kb,无需依赖服务

Naw*_*nit 7 c# xamarin xamarin.forms

我正在尝试将Xamarin.Forms中从相机拍摄的图像压缩到250kb大小.我找到了在依赖服务中做到这一点的方法,但我希望它没有依赖服务(纯xamarin.forms代码).怎么可能呢.谁能建议我你有最好的方法?

提前致谢

Tom*_*mmy 18

这是一项非常复杂的工作,因为您需要大量的图像处理知识.

最重要的是,重新发明轮子是一个坏举措.

http://www.codeproject.com/Articles/83225/A-Simple-JPEG-Encoder-in-C

看一下上面代码项目,它只处理JPEG; 不要说TIFF,GIF,BMP等

图像压缩涉及许多复杂的数学变换,如DCT和Huffman.

您将需要整个大学学期来学习这些基础知识.


另一方面,明智地利用平台支持,您可以在一分钟内完成任务.

Windows Phone中的BitmapEncoder.

FileStream stream = new FileStream("new.jpg", FileMode.Create);
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.QualityLevel = 30;
encoder.Frames.Add(BitmapFrame.Create(image));
encoder.Save(stream);
Run Code Online (Sandbox Code Playgroud)

Android中的位图

using (System.IO.Stream stream = System.IO.File.Create(targetFile))
{
    bitmap.Compress(Bitmap.CompressFormat.Jpeg, 30, stream);
}
Run Code Online (Sandbox Code Playgroud)

iOS中的UIImage

NSData data = image.AsJPEG(0.3);
Run Code Online (Sandbox Code Playgroud)

.NET框架中的位图

ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
ImageCodecInfo codec = codecs.First(t => t.FormatID == ImageFormat.Jpeg.Guid);
EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(Encoder.Quality, 30L);
bitmap.Save("output.jpg", codec, parameters);
Run Code Online (Sandbox Code Playgroud)


小智 6

我也有同样的问题。请检查这里,因为我相信您会找到解决方案。

\n

https://xamarincodes.com/2020/04/05/image-compression-in-xamarin-forms/

\n

我使用 Xam.Plugin.Media \xe2\x80\x93 设置压缩质量来拍照和压缩。

\n

这是一个示例

\n
private async void cmdCameraPhotograph_Clicked(object sender, EventArgs e)\n    {\n        if (CrossMedia.Current.IsTakePhotoSupported)\n        {\n            var file = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions\n            {\n                Directory = "Photographs",\n                SaveToAlbum = true,\n                CompressionQuality = 40,\n                CustomPhotoSize = 35,\n                PhotoSize = PhotoSize.MaxWidthHeight,\n                MaxWidthHeight = 2000,\n                DefaultCamera = CameraDevice.Rear\n            }).ConfigureAwait(true);\n\n            if (file != null)\n            {\n                \n            }\n        }\n        else\n        {\n            await DisplayAlert("Not Supported", "Your device does not support this feature.", "OK. Understood")\n                .ConfigureAwait(true);\n        }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n
\n

您还可以从图库获取该文件

\n
var file = await CrossMedia.Current.PickPhotoAsync(new PickMediaOptions\n            {\n                CompressionQuality = 40,\n                CustomPhotoSize = 35,\n                PhotoSize = PhotoSize.MaxWidthHeight,\n                MaxWidthHeight = 2000\n            }).ConfigureAwait(true);\n
Run Code Online (Sandbox Code Playgroud)\n