Как обрезать проанализированное изображение в Android?
Я анализирую веб-сайт для отображения содержимого в URL-адресе, в котором есть некоторые изображения. Я хочу обрезать изображения, которые анализируются с сайта. Я действительно борюсь с этим, может ли кто-нибудь помочь мне относительно этого?
4 ответа
Решение
Я предполагаю, что вы уже "получили" изображения с веб-сайта и хотите изменить их размер, а не обрезать? Т.е. создавать миниатюры.
Если это так, вы можете использовать следующее:
// load the origial BitMap (500 x 500 px)
Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),
R.drawable.android);
int width = bitmapOrg.width();
int height = bitmapOrg.height();
int newWidth = 200;
int newHeight = 200;
// calculate the scale - in this case = 0.4f
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// createa matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap
Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0,
width, height, matrix, true);
// make a Drawable from Bitmap to allow to set the BitMap
// to the ImageView, ImageButton or what ever
BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
ImageView imageView = new ImageView(this);
// set the Drawable on the ImageView
imageView.setImageDrawable(bmd);
// center the Image
imageView.setScaleType(ScaleType.CENTER);
Лучшая ссылка github -> AndroidImageCrop
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
photoPicker();
}
private void photoPicker() {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 1);
}
private void crop(Uri photoUri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setData(photoUri);
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);
startActivityForResult(intent, RESULT_CROP);
}
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == RESULT_OK) {
Uri photoUri = intent.getData();
if (photoUri != null) {
Log.i("TAG", "Start Crop!!");
crop(photoUri);
}
} else if (resultCode == RESULT_CROP) {
Toast.makeText(this, "Image crop", Toast.LENGTH_SHORT).show();
}
}
Менеджер контактов Android EditContactActivity использует Intent("com.android.camera.action.CROP")
Это пример кода:
Intent intent = new Intent("com.android.camera.action.CROP");
// this will open all images in the Galery
intent.setDataAndType(photoUri, "image/*");
intent.putExtra("crop", "true");
// this defines the aspect ration
intent.putExtra("aspectX", aspectY);
intent.putExtra("aspectY", aspectX);
// this defines the output bitmap size
intent.putExtra("outputX", sizeX);
intent.putExtra("outputY", xizeY);
// true to return a Bitmap, false to directly save the cropped iamge
intent.putExtra("return-data", false);
//save output image in uri
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
Затем, startActivityWithResult()
чтобы узнать, нажал ли пользователь кнопку " ОК" или " Отмена". В первом случае обрезанное изображение будет сохранено в uri
,
<ImageView android:id="@+id/title_logo"
android:src="@drawable/logo"
android:scaleType="centerCrop" android:padding="4dip"/>