Power Apps上で撮影した画像やOneDrive上にある画像ファイルなどを、Office Scriptsを使用してサイズ変更する方法を紹介します。
Power AutomateのExcelコネクタしか利用していませんので、プレミアム機能やDLPポリシーを気にせずに使えます。
準備
Power Automateから参照できる場所(OneDriveやTeamsのドキュメントライブラリ上)にExcelファイルを作成してください。Office Scriptsを利用したいだけなので、適当なExcelで構いません。
作成したExcelをブラウザで起動し、自動化タブの新しいスクリプトをクリックします。
コードエディタ内に以下のコードを貼り付けます。
function main(
workbook: ExcelScript.Workbook,
Photo: string //入力はPhoto、コード内変数はvarPhoto
) {
// Your code here
const sheet = workbook.getWorksheet("Sheet1");
const varPhoto = sheet.addImage(Photo);
//画像サイズ縮小
varPhoto.scaleHeight(0.5, ExcelScript.ShapeScaleType.currentSize);
varPhoto.scaleWidth(0.5, ExcelScript.ShapeScaleType.currentSize);
//フローに縮小後の画像を返す
return varPhoto.getAsImage(ExcelScript.PictureFormat.png);
}
スクリプトを保存をクリックして保存します。
倍率によるサイズ変更ではなく値によるサイズ変更の場合は10,11行目をsetHeight,setWidthメソッドに変更してください。
フローの作成
下記の通りにPower Automateのフローを作成します。
スクリプトへの入力(Photo)は下記のように入力します。
decodeBase64(base64(triggerBody()['file']['contentBytes']))
変換前のトリガーからの出力部分( triggerBody()['file']['contentBytes'] )はファイルコンテンツの取得などのアクションで取得したファイルコンテンツで代用可です。
Power Appsで画像の選択・表示
キャンバスアプリ上に画像の追加コントロールと画像コントロールを追加します。
先ほど作成したPower Automateのフローをアプリに追加します。
画像の追加コントロールのAddMediaButton1.OnChangeを以下に設定します。
Set(_Image,'フロー名'.Run({file:{contentBytes:UploadedImage1.Image,name:""}}).file)
画像コントロールのImageプロパティを_Imageに設定します。
結果
左が追加した画像(画像の追加コントロール)で、右が変換後(画像コントロール)の画像です。解像度が落ちています。
10,11行目のscaleHeight,scaleWidthの引数を0.2にして再度実行しました。
モザイクをかけることに成功しました。
コメント
写真が多くなるとアプリの動作に支障するので、どうにかできないかとずっと探してました。
ありがとうございます。
参考にさせていただきます。