【Unity】カメラロールとかの端末の画像を取得


f:id:nuakam:20180924115239j:plain:w500


端末の画像を取得

スマホカメラで撮影した画像や、ネットからダウンロードした画像は端末内に保存される。
その画像をアプリから取得させたいのだ。


結論




できた
f:id:nuakam:20180119185703j:plain





端末の画像選択はOS側の処理によるため、意外と面倒で大変。
いろいろなやり方がありそうだけど調べる時間がなくて、、、

やり方

先人のコピペ


スクリプト言語はあるものをパズルのようにはめ込む方法が最優秀
なるべく自作しちゃいけないものさ。

曰く、先人達より。



そもそもUnityはそういうものらしい。
プログラマーじゃなくても使えるようにコピペ推奨なのだ。



画像選択に使ったのはコレ。
blog.kakeragames.com



2D開発してるからちょこちょこ改造が必要。

でも無料。

嬉P。
感謝感激。

Assetストアで買ったら70$ぐらいする。
たけーよ


注意点

このunimgpicker内部処理は作者サイトで読むとして、注意事項として諸々のところを記載。


画像が消える

サンプルシーンとスクリプトを見ればだいたい分かるけど、画像のパスは変数[path]に保存している。
そもそもサンプルは選択した画像をテクスチャに貼るものだからだ。



このpathは「関数を抜けると作成したディレクトリごと削除される」ため、画像そのものの編集をする場合にはロード内で行う必要がある。

今回は画像をbase64化し、サーバーに送信したかったため、選択成功時にbyte化し、外部のスクリプト変数に保存。


送信時にbyte[]画像をbase64にエンコードした。

IOSにイラつく

IOSの純正カメラアプリは画像の向きがあべこべ。

撮った画像をappleの何らかの謎ポリシーに従って変な方向で保存しやがる。
向き情報はExifになんだかよくわからない形式で保存している。


Unityは画像を読み込む時Exif情報を無視してしまう。
そのためImage spriteに貼ろうがtextureに貼ろうが向きがばらっばらになる。


そこでここを参考にした。

Exifとの格闘の記録 | Dokyuments



彼の記事の通り格闘だった。

記事にある通り色々なスクリプト入れてExif情報は取得できた。



…はずだった‥



なんとIOSは形式が違うのか何なのか情報が全部0になる。



記事にある通りサーバーでやってくれるように頼んだ。


サーバーの人「負荷が大きいからアプリ側でやって」



ふおおおおおおおおおおおおおおおおおおおおおおおおお


IOSはAssetを買うことにしました($70)

prime31
はじめから買ってれば。。。



他にも画像縮小、切り取りもできるようにしたけど、それは後日。需要があれば。