Xamarin表单-将byte[]大小减小到目标大小

cwtwac6a  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(149)

我已经看过几个例子,但到目前为止,在这个问题上没有任何帮助。
我有一个byte[]格式的图像,大小必须减少到2 MB以下。我尝试了几种方法,但到目前为止都没有帮助。
我使用了下面的代码,可以在许多这样的问题中找到:

public static byte[] Compress(byte[] data)
        {
            MemoryStream output = new MemoryStream();
            using (DeflateStream dstream = new DeflateStream(output, CompressionLevel.Optimal))
            {
                dstream.Write(data, 0, data.Length);
            }
            return output.ToArray();
        }

这确实减少了图像的大小,但不会低于2 MB,我不知道如何在这里说明。其他示例侧重于将图像以减小的大小保存在手机上,但我的图像应该保留在byte[]. This question中,因此没有帮助。
希望有人能帮上忙。

4xrmg8kj

4xrmg8kj1#

您可以尝试使用nuget Xam.Plugin.Media来设置压缩质量,以拍摄照片和压缩以及。
请参考以下代码:

private async void cmdCameraPhotograph_Clicked(object sender, EventArgs e)
    {
        if (CrossMedia.Current.IsTakePhotoSupported)
        {
            var file = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions
            {
                Directory = "Photographs",
                SaveToAlbum = true,
                CompressionQuality = 40,
                CustomPhotoSize = 35,
                PhotoSize = PhotoSize.MaxWidthHeight,
                MaxWidthHeight = 2000,
                DefaultCamera = CameraDevice.Rear
            }).ConfigureAwait(true);

            if (file != null)
            {
                
            }
        }
        else
        {
            await DisplayAlert("Not Supported", "Your device does not support this feature.", "OK. Understood")
                .ConfigureAwait(true);
        }
    }

您也可以从库中获取文件

var file = await CrossMedia.Current.PickPhotoAsync(new PickMediaOptions
        {
            CompressionQuality = 40,
            CustomPhotoSize = 35,
            PhotoSize = PhotoSize.MaxWidthHeight,
            MaxWidthHeight = 2000
        }).ConfigureAwait(true);

您也可以在不同的平台上单独压缩图像。要了解更多信息,请查看线程Compress images

相关问题