AppStudio Framework 包含大量函数,可用于从图像中提取信息和在应用程序中修改这些信息。
图像对象
可使用图像对象在应用程序中显示图像,此后,还可使用其他参数修改图像的显示。source 属性提供要显示图像的位置,而其他属性说明图像的显示方式。以下代码示例显示的特定图像不但保留了纵横比,而且还与图像所在布局元素的水平和垂直中心对齐。
该代码示例显示的特定图像不但保留了纵横比,而且还与图像所在布局元素的水平和垂直中心对齐。
Image {
fillMode: Image.PreserveAspectFit
source: "Example.png"
horizontalAlignment: Image.AlignHCenter
verticalAlignment: Image.AlignVCenter
cache: false
}
}
如需对图像进行更加复杂的处理,ImageObject 组件提供了一系列可用于检查图像属性或转换图像的工具。ImageObject 默认存储其自己的图像。以下代码示例说明了如何将 ImageObject 与别处提供的显示图像相连接:
//Create ImageObject instance
ImageObject {
id: imageObject
}
Image {
id: displayedImage
fillMode: Image.PreserveAspectFit
source: imageObject.url //Set source to URL housed by ImageObject
horizontalAlignment: Image.AlignHCenter
verticalAlignment: Image.AlignVCenter
cache: false
}
}
该代码示例以两个按钮的形式使用 ImageObject rotate 函数,用于在两个方向上 90 度旋转图像。
Button {
text: "Rotate Left"
onClicked: {
imageObject.rotate(-90); //Rotates 90 degrees left
displayedImage.refresh(); //Refreshes displayed image
}
}
Button {
text: "Rotate Right"
onClicked: {
imageObject.rotate(90); //Rotates 90 degrees right
displayedImage.refresh(); //Refreshes displayed image
}
}
ImageObject 包含大量名称相似的函数,通常仅在时态上有所差别,例如 mirror 和 mirrored。在这种情况下,行为存在差异。具有现在时名称的函数可直接更改现有图像对象,而具有过去时名称的函数则会更改图像对象的副本。
Exif 元数据
图像还可以包括 Exif 元数据,即一系列包括图像本身信息的标签。大多数此类元数据由现代照相机拍摄的照片自动提供,并可能包含用于说明图像拍摄位置的 GPS 信息。AppStudio Framework 可以使用 ExifInfo 组件读取和写入这些标签。
AppStudio Framework 可处理以下三种类型的 Exif 标签:
- 图像标签,例如分辨率、创建日期和时间,以及说明
- 扩展标签,如光源、快门速度和曝光模式
- GPS 标签,如经度、速度和地图基准面
以下代码示例显示了如何显示采集自图像的 Exif 标签,这一图像通过文件对话框选择,Exif 标签可在之后被覆盖。该示例使用经度、纬度和高度,但是可以针对其他元数据进行修改。 FileDialog { //Creates a platform-agnostic file choosing dialog
id: loadDialog
title: "Load Image"
selectExisting: true
selectMultiple: false
nameFilters: [ "Image files (*.jpg *.png)", "All readable formats (All files (*)" ]
folder: Qt.platform.os == "ios"
? "file:assets-library://"
: AppFramework.standardPaths.standardLocations(StandardPaths.PicturesLocation)[0]
onAccepted: {
exifInfo.load(fileUrl);
}
}
ExifInfo { //Instantiates ExifInfo
id: exifInfo
}
ColumnLayout {
anchors {
fill: parent
margins: 10
}
TextField {
text: exifInfo.gpsLatitude
font.bold: true
}
TextField {
text: exifInfo.gpsLongitude
font.bold: true
}
TextField {
text: exifInfo.gpsAltitude
font.bold: true
}
Button {
text: "Load"
onClicked: {
loadDialog.open();
}
}
}