颤振图像处理导致像素化
Posted
技术标签:
【中文标题】颤振图像处理导致像素化【英文标题】:Flutter image processing causing pixelation 【发布时间】:2020-07-29 16:45:32 【问题描述】:正在处理一个颤振项目,该项目需要在上传到服务器之前拍照并将图像调整大小/裁剪到 640 / 420 (15:10),但它们似乎失去了太多质量和像素化。
img.Image image = img.decodeImage(a2);
double width = (image.height / 10) * 15;
image = img.copyCrop(image, ((image.width - width) / 2).round(), 0, width.round(), image.height);
resized = img.encodeJpg(img.copyResize(image, width:640, interpolation: img.Interpolation.cubic));
目前使用camera 以720p (1280x720) 拍摄,使用image 插件进行裁剪并使用平均插值调整大小。
我主要想知道这是否是处理图像处理以保持最高质量的最佳方法,或者是否有针对此用例的更好方法。
【问题讨论】:
【参考方案1】:你应该试试这个方法,我自己一直在使用下面的方法,效果很好,图像也没有损失任何质量,而且尺寸太压缩了
final _tempDir = await getTemporaryDirectory();
final _path = _tempDir.path;
im.Image imageFile = im.decodeImage(_file.readAsBytesSync());
mealID = Uuid().v4();
final compressedImageFile = File('$_path/img_$mealID.jpg')
..writeAsBytesSync(im.encodeJpg(imageFile, quality: 80));
setState(()
_file = compressedImageFile;
);
上述方法是用于压缩图像,以及从图库/相机中捕获图像,我使用以下方法。
Future getImageFromCamera() async
Navigator.pop(context);
var image = await ImagePicker.pickImage(
source: ImageSource.camera,
imageQuality: 50,
/*you can set max height and/or width here as well just by setting value for maxHeight and/or maxWidth argument*/
);
setState(()
_file = image;
);
await compressImage();
Future getImageFromGallery() async
Navigator.pop(context);
var image = await ImagePicker.pickImage(
source: ImageSource.gallery,
imageQuality: 50,
);
setState(()
_file = image;
);
await compressImage();
【讨论】:
以上是关于颤振图像处理导致像素化的主要内容,如果未能解决你的问题,请参考以下文章
将巨大的图像 (5mb) 加载到 svg 背景中会导致像素化和性能问题
Unity ShaderSpecial EffectsPixel 像素化(UI)
Unity ShaderSpecial EffectsPixel 像素化(UI)