我无法找到降低图片文件大小的方法。 我从使用FilePicker的StorageFile开始,然后使用WriteableBitmap类调整它的大小,现在我想减少我的图像文件。
这是我的代码中没有工作的部分:
BitmapDecoder compressDecoder = await BitmapDecoder.CreateAsync(imageStream);
PixelDataProvider compressionData = await compressDecoder.GetPixelDataAsync();
byte[] compressionBytes = compressionData.DetachPixelData();
//Set target image quality
BitmapPropertySet propertySet = new BitmapPropertySet();
BitmapTypedValue qualityValue = new BitmapTypedValue(0.5, PropertyType.Single);
propertySet.Add("ImageQuality", qualityValue);
imageStream.Seek(0);
BitmapEncoder compressionEncoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, imageStream, propertySet);
compressionEncoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, compressDecoder.PixelWidth, compressDecoder.PixelHeight, compressDecoder.DpiX, compressDecoder.DpiY, compressionBytes);
await compressionEncoder.FlushAsync();
问题在于,即使我尝试将qualityValue设置为0.5或更低,我仍然可以看到图像失去质量(当然),但文件大小保持完全相同。 怎么可能呢?
实际上,如果我将质量设置为1.0,文件大小几乎翻倍,我将其调低至0.5,文件大小保持不变(即使图像质量较差)然后如果我继续转动它文件大小不会改变。 如果这是有道理的,我不知道如何:/
我在这里遗漏了什么吗?还有另一种压缩图像的方法吗? 我的意思是,我只是希望我的流不要超过固定的最大长度,所以我想继续降低质量,直到达到适当的平衡。
感谢您的帮助! 塞尔吉奥