AppStudio Framework содержит массив функций как для извлечения информации из изображений, так и для модификации их в пределах приложения.
Объекты Image
Изображения могут быть отображены в приложении через использование объекта Image, который, в свою очередь, поддерживает дополнительные параметры, позволяющие управлять отображением изображения. Свойство 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 изображения, выбранного через диалоговое окно файла, который заме можно перезаписать. В этом примере используется широта, долгота и высота, но можно использовать и другие метаданные. 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();
}
}
}