HEIC写真をLooking Glass用にRGBD JPEGに変換するクイックアクションを作った

**ついにLooking Glass Portraitが来た！**
ということでさっそくiPhoneのポートレートモード写真を表示しようとしたが、ほとんどHEIC形式で撮ってしまっていたためどうにかしたかった。


# 結局やったこと
1. ポートレートモードで撮った写真をiPhoneからMacにAirDrop（どう頑張ってもHEICで転送されてしまう）
1. HEICファイルから`heif-convert`コマンドで深度マップを摘出
1. ImageMagickの`convert`コマンドで、RGBと深度マップが横並びになったJPEG画像を作成
1. HoloPlay Studioに"RGBD Photo And Video"として読み込み

画像の処理は以下よのうなシェルスクリプトでやった。ImageMagickのインストールが必要なことに注意。

```bash
TMPDIR=/tmp/depth_heic
mkdir -p $TMPDIR
for f in "$@"
do
    /usr/local/bin/heif-convert $f $TMPDIR/tmp.jpg
    /usr/local/bin/convert -resize 2048x2048 $TMPDIR/tmp.jpg $TMPDIR/tmp-rgb.jpg
    /usr/local/bin/convert -resize 2048x2048 $TMPDIR/tmp-depth.jpg $TMPDIR/tmp-d.jpg
    /usr/local/bin/convert $TMPDIR/tmp-rgb.jpg $TMPDIR/tmp-d.jpg +append $TMPDIR/tmp-rgbd.jpg
    cp $TMPDIR/tmp-rgbd.jpg $f-rgbd.jpg
done
rm -rf $TMPDIR
```

画像ファイルを右クリックしてこんな感じで実行すれば、HoloPlay Studioに入れられるJPEGができる。

![スクリーンショット 2022-01-05 18.04.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60348/e606c54a-ab05-1a4a-877b-67eb5cfa67a9.png)


# 詳細
## 画像の読み込み
[Looking Glassの公式ページ](https://learn.lookingglassfactory.com/tutorials/how-to-turn-your-iphone-photos-in-holograms)に書いてあることをやってみたが、

* 転送設定を「自動」にしてAirDrop　→　無事HEICで転送される😇
* Mailアプリで送信　→　JPEGにはなるがHoloPlay Studioによると深度情報がないとのこと

という感じであきらめた。
ちなみに、カメラの設定でもともとJPEGで撮影した写真はそのままAirDropしてHoloPlay Studioで読み込めた。

## RGBD写真の作成
RGBDのJPEGってどうやって作るのだろう？と思って調べたがいまいち要領を得なかった。それもそのはずで、RGBD形式なんてものはないのだ！
以下のようにRGB情報と深度マップを並べたものをそう呼んでいるらしい。
![IMG_1288.heic-rgbd.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60348/c3eeac2a-955b-69c8-1ddf-8ca930849ef9.jpeg)

なのでがんばってこういう画像を作る。
まずはheicファイルから深度情報を取り出す。

```bash:深度情報の分離
heif-convert your_pic.heic output.jpg
# output.jpgとoutput-depth.jpgができる
```

これでRGB情報が`output.jpg`に、深度情報が`output-depth.jpg`に出力される。
あとはこれをくっつければいいのだが、RGBと深度で解像度が違うので、きっちり横並びにするには深度のほうを拡大してやる必要がある。
ついでにRGBのほうもLooking Glassの解像度に合わせてリサイズしてみる。

```bash:画像のりサイズと結合
convert -resize 2048x2048 output.jpg pic-rgb.jpg
convert -resize 2048x2048 output-depth.jpg pic-d.jpg
convert pic-rgb.jpg pic-d.jpg +append pic-rgbd.jpg
```

`convert`コマンドは`brew install imagemagick`で使えるようになる。
`+append`で横並びに結合するようだ。（縦並びは`-append`らしい）

## クイックアクション化
シェルスクリプトをいちいち叩くのも面倒なのでクイックアクションにしてみる。
これで上に貼ったように右クリックから変換できる。

クイックアクションはautomatorで作れる。
新規作成でクイックアクションを選択。
![スクリーンショット 2022-01-05 18.15.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60348/743205d5-6aed-3beb-34fa-e9734c38410e.png)

Finderからのイメージファイルのみ受け入れるようにしておく。
「シェルスクリプトを実行」を追加して、「入力の引き渡し方法」を「引数として」にした。これでシェルスクリプトの引数に選択したファイルのパスが渡される。
中身のスクリプトに書き換えて保存。
![スクリーンショット 2022-01-05 19.09.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60348/31b70a6d-5a81-b794-2beb-c0fa339579a3.png)

```bash
TMPDIR=/tmp/depth_heic
mkdir -p $TMPDIR
for f in "$@"
do
    /usr/local/bin/heif-convert $f $TMPDIR/tmp.jpg
    /usr/local/bin/convert -resize 2048x2048 $TMPDIR/tmp.jpg $TMPDIR/tmp-rgb.jpg
    /usr/local/bin/convert -resize 2048x2048 $TMPDIR/tmp-depth.jpg $TMPDIR/tmp-d.jpg
    /usr/local/bin/convert $TMPDIR/tmp-rgb.jpg $TMPDIR/tmp-d.jpg +append $TMPDIR/tmp-rgbd.jpg
    cp $TMPDIR/tmp-rgbd.jpg $f-rgbd.jpg
done
rm -rf $TMPDIR
```

仕組みはわからないが、automatorで保存するとすぐクイックアクションのところに追加される。

## HoloPlay Studioに読み込み
できた画像をHoloPlay Studioにドラッグアンドドロップ！
"RGBD Photo And Video"を指定すればよい。

# できたもの

こうじゃ！
![dog.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60348/918e2cfb-d4d8-7805-274b-b3b519c48bc0.jpeg)