Android版GPUImageで画像加工
画像や動画にエフェクトをかけることができるライブラリである、GPUImageをAndroidから使ってみたのでメモ。
サンプル実行
NDK(Android Native Development Kit)のインストールが必要
GradleでNDKを自動インストールしてくれるプロジェクトもあるが、GPUImage for Android のサンプルはそうなっていない。Android Studio で
ファイル → 設定 → SDK Tools → NDK
にチェックを入れて適用すると、NDKがインストールされる。インストールされたら
C:\Users\ユーザ名\AndroidStudioProjects\GPUImage\local.properties
で
ndk.dir=C\:\\Users\\ユーザ名\\AppData\\Local\\Android\\Sdk\\ndk-bundle
のパスが正しいことを確認する。
さらに
C:\Users\ユーザ名\AndroidStudioProjects\GPUImage\library\build.gradle
の12行目を編集。(gitからバージョンコードを取得している?ようだが、取れずにエラーになるので適当な数値を設定)
versionCode "git rev-list origin/master --count".execute().text.toInteger()
↓
versionCode 1
まだ謎エラーが出るようなら、
ビルド → Clean Project ビルド → Rebuild Project
を試す。問題がなくなると追加ライブラリのインストールを求められたのでインストール。その後実行すると、サンプルを実機にインストールできた。
プロジェクトに組み込み
C:\Users\ユーザ名\AndroidStudioProjects\プロジェクト名\app\build.gradle
のdependenciesに以下を追加
//GPUImage
compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
これだけでプロジェクトにGPUImageが組み込まれるので、あとは呼び出すだけ。以下Intentから画像を選択して、その結果にフィルタをかけて表示するサンプルの抜粋。
// Intentを取得
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, REQUEST_GALLERY);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_GALLERY && resultCode == RESULT_OK) try {
InputStream in = getContentResolver().openInputStream(data.getData());
Bitmap img = BitmapFactory.decodeStream(in);
in.close();
// GPUImageで画像を加工
GPUImage mGPUImage = new GPUImage(this);
mGPUImage.setFilter(new GPUImageSobelEdgeDetection());
mGPUImage.setImage(img);
img = mGPUImage.getBitmapWithFilterApplied();
// 画像を表示
imageViewer.setImageBitmap(img);
Toast.makeText(MainActivity.this, "画像を選択しました", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}