Работа с изображениями

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