画像の操作

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
    }
}

次のサンプル コードは、2 つのボタンで 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 は、次の 3 種類の 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();
        	}
	}
}