何がしたかったか
スマホのカメラで撮影した写真を、会社で使っているOneDrive for Businessにアップロードしてメール/Teamsで通知というようなことをやりたいとき、スマホのカメラの画像だとどうしても大きくてメールや投稿につけたときに読み込みが遅くなる/ダウンロードに時間がかかってしまう。
というようなことがあるかなと思います。(と、Twitterの友人が言っていました)
そのような場合に、写真をリサイズ/軽量化したくなるんだけど、Office 365の枠内だとそういうコネクタやアクションがないんですよね。。
Encodian (3rd party) 使えばいいのですが、純正以外禁止されているパターンもあり。
今回はリサイズや軽量化とはちょっと違うけど、目的を達成できるFlowをご紹介です。
Power Automateをつかって、ファイルのサムネイルを保存しなおします。
Flow
これだけ。最初にアップロードした写真のサムネイルを取得して、それを保存しなおすことで、サイズを小さくしたファイルをOneDriveに残せます。
[2020/3/5:修正]
Teamsに通知したい場合、HTMLのメッセージでは画像のリンクしか載せられないので、Adaptive Cardを使います
ちょっとだけ、数式を使わないと取れない部分があるので記載します。
- 添付したファイル名
triggerBody()?['file']?['name']
取れそうな気もするのですが、私の環境だと表示されなかったので念のため。
- 保存先のパス+ファイル名
ここは用途に応じてですが、私はOneDriveのルート(直下)に、幅(px)-高さ(px)ファイル名.拡張子 の形式で保存しました。
その際の数式は、以下のようになります。
concat('/',body('Get_file_thumbnail')?['Width'],'-',body('Get_file_thumbnail')?['Height'],triggerBody()?['file']?['name'])
- Adaptive Card用のJSONとdatauri
ここでは単純にカードの中にImageだけが入ったものを送ります。
その場合
{
"type": "AdaptiveCard",
"version": "1.0",
"body": [
{
"type": "Image",
"altText": "",
"url": "@{datauri(body('Get_file_content_using_path'))}"
}
],
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json"
}
この短いAdaptive CardをComposeしておいて、あとはTeamsのメッセージ部分に挿入します。
通知部分
[2020/3/5:大幅修正]
Teamsへの投稿で写真を載せたい場合、サムネイルのUrlだとあとから表示されなくなる、そもそもSharePoint/OneDriveの画像は表示されない などの制限があります。
そこで、Adaptive Cardを利用します。(ここポイント!!)
Adaptive Cardにすると、画像のコンテンツのdataUriをCardのImageブロックに表示させることができます!
やったぜ!!
補足
作成したファイル (もともとサムネイル)は、ダウンロードしたらJPEGに拡張子を変更すれば写真ビューワーなどで表示できるようになります。
(900KBくらいの写真から、生成されたサムネイルは60KBほどでした)