blitz-time アプリ開発ブログ

Androidアプリ開発などのTips集

【Androidアプリ開発】写真のトリミング

撮影した写真から必要な個所だけを切り抜きたい場合は、外部アプリのトリミング機能を利用すると便利です。

// uri: 写真のUri
private void showTrimImage( Uri uri ){
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, "image/*");
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", 10);
    intent.putExtra("aspectY", 5);
    intent.putExtra("outputX", 1000);
    intent.putExtra("outputY", 500);
    intent.putExtra("scaleUpIfNeeded", true);
    intent.putExtra("scale", "true");
    intent.putExtra("noFaceDetection", true);
    intent.putExtra("return-data", false);
    intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.name());
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(--出力パス--));
    intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
    ((AppCompatActivity)mContext).startActivityForResult(intent,999);
}

putExtraで設定している各種パラメータは必要に応じて調整してください。

なお、写真のサイズが大きすぎる場合、"return-data"により、Intentの戻り値として写真を設定してしまうと、メモリ不足により強制終了する場合がありますので、外部アプリで指定Uriに写真を保存させるようにすることをお勧めします(MediaStore.EXTRA_OUTPUTの利用)。