使用图像

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 包含大量名称相似的函数,通常仅在时态上有所差别,例如 mirrormirrored。在这种情况下,行为存在差异。具有现在时名称的函数可直接更改现有图像对象,而具有过去时名称的函数则会更改图像对象的副本。

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();
        	}
	}
}