Android で画像トリミング機能を実装してみた件
Android で Instagram や LINE アプリの様に
プロフィールアイコンに使用する画像を
切り取る処理を実装する方法について
手段その①
android Git repositories - Git at Google から拝借する
Gallery アプリ内に CropImage.java があるので
付随して必要なファイルを全てコピーします。
git clone https://android.googlesource.com/platform/packages/apps/Gallery
git clone https://android.googlesource.com/platform/packages/apps/Gallery2
git clone https://android.googlesource.com/platform/packages/apps/Gallery3D
クローンして Eclipse or Android Studio で検索すると早く見つけられます。
ギャラリーアプリは3つありますが違いはよく分かりません。
私は Gallery2 の CropImage を参照しましたが、
Gallery と Gallery3D にも CropImage ファイルが入っていました。
(Gallery3D は Android 2.0 まで?)
CropImage 周辺ファイルのカスタマイズについて
HighlightView.java のコンストラクタに以下のコードを追加しました。
public HighlightView(View ctx) {
ctx.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
mContext = ctx;
}
Android 4.0 以上でもフォーカスの当たらない部分に網掛けするために
ハードウェアアクセラレーションを OFF にします。
Yukiの枝折: Android:ハードウェアアクセラレーション
しかし動きが遅くなってしまいました。
網掛けを止めればサクサク移動できるようになりました。
またフラグが色々とあるので true, false で各種設定を変更できます。
トリミングしたい画像の URI からファイルパス(String)を返す処理についてですが
Android 2.x, 4.x と 4.4 のファイルパスは違うらしいので
Android バージョンを判定して処理を変える必要があるそうです。
また SAMSUNG の GALAXY Note Edge などの端末で
トリミングする画像の向きが正しくならない場合があります。
なので Bitmap を読み込む前に ExifInterface を取得して画像の向きを正しく直す必要があります。
ギャラリーから取得した写真を正しい向きで表示
丸枠のトリミングができます。
四角のトリミングもできます。
手段その②
Android 端末にデフォルトでインストールされているアプリのトリミング機能を使用する
Crop image android android - Stack Overflow
デフォルトのギャラリーアプリに画像切り抜き機能があるので Intent で呼び出して使用します。
手段その③
GitHub で公開されているライブラリを使う
ArthurHub/Android-Image-Cropper
lvillani/android-cropimage
biokys/cropimage
“CropImage android” で検索して見つけました
手段その④
Adobe の Creative SDK を利用する。