【发布时间】:2021-08-08 09:08:28
【问题描述】:
我正在 Flutter 中制作一个应用程序,我在其中使用 image_picker,我想知道如何知道图像的方向,如果图像是垂直的还是水平的。
有什么办法吗?
【问题讨论】:
我正在 Flutter 中制作一个应用程序,我在其中使用 image_picker,我想知道如何知道图像的方向,如果图像是垂直的还是水平的。
有什么办法吗?
【问题讨论】:
读取图像文件方向的正确方法是读取其元数据。 每当创建任何图像文件时,它也会创建 Exif 文件(或元数据文件)。此 EXIF 文件包含图像的所有属性,如方向、宽度、高度等。
使用 readAsBytes 函数将为您提供 EXIF 元数据。
图像的方向取决于您握持相机的方式。如果您是通过将相机倒置拍摄的,那么您的图像将具有垂直方向,但图像内容将是倒置的。
图像总共支持 8 个方向。你可以在这里读更多关于它的内容 https://sirv.com/help/articles/rotate-photos-to-be-upright/
但是,如果您只想查找方向,则可以使用 EXIF 文件使用 readAsBytes 函数找到它并访问方向属性。
【讨论】:
decodeImageFromList() 为我们提供图像的高度和宽度,根据大小我们可以决定给定图像是垂直的还是水平的。
import 'dart:io';
final picker = ImagePicker();
final pickedFile = await picker.getImage(source: ImageSource.camera);
File image = new File(pickedFile.path);
var decodedImage = await decodeImageFromList(image.readAsBytesSync());
bool isHorizontalImage = decodedImage.width > decodedImage.height;
【讨论】:
从选择器中获取文件后,转换为图像并获取宽度和高度,计算比率然后获取方向:
image = Image.memory(await pickedFile.readAsBytes())
【讨论】:
bool isLandscapeImage = image.width > image.height;