我跟随this从网络视图捕获或选择文件并上传...这是完美的,适用于所有Android版本..
那边我想添加裁剪意图...裁剪相机捕获/图库然后上传所有这些发生从Webview
我有this意图为Crop Image添加..我想在MainActivity中添加它..在Capture中形成相机和图库 ..
Intent cropIntent = new Intent("com.android.camera.action.CROP");
// indicate image type and Uri
cropIntent.setDataAndType(data.getData(), "image/*");
cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
cropIntent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString());
// set crop properties
cropIntent.putExtra("crop", "true");
// indicate aspect of desired crop
cropIntent.putExtra("aspectX", 1);
cropIntent.putExtra("aspectY", 1);
// indicate output X and Y
cropIntent.putExtra("outputX", 256);
cropIntent.putExtra("outputY", 256);
// retrieve data on return
cropIntent.putExtra("return-data", true);
// start the activity - we handle returning in
// onActivityResult
startActivityForResult(cropIntent, 3);
所以它可能是我想裁剪和上传的相机或图库..
可以任何人建议我如何将Crop Intent添加到主要活动..
更新1
我有意图捕捉相机和视图库..以类似的方式我有Crop Intent的选项......但我想将这个裁剪应用于相机意图和画廊,但所有这些都需要在webview中进行( Mainactivity)...
请检查我的Mainactivity ...在回答之前..
我想为相机意图和图库意图添加Crop Intent ..它应该能够上传...最小分辨率...不超过2megapixel ..如果少于也没问题...像{{ 3}}在位图...
在更新中,我再次添加了相同的链接,不要感到困惑......
所有这里需要在网页浏览中裁剪和上传...
更新2
是否可以在我的MainActivity中使用this库...如果从网络视图裁剪捕获相机并在同一网页视图中上传...
答案 0 :(得分:1)
首先,在gradle文件中添加依赖项:
compile 'com.soundcloud.android:android-crop:1.0.1@aar'
然后,下面是裁剪图像的逻辑。将此方法放在Activity类中,并根据您的要求在Activity上调用此方法,并传递图像的URI。
private void beginCrop(Uri source) {
Uri destination = Uri.fromFile(new File(getCacheDir(), "cropped"));
Crop.of(source, destination).asSquare().start(this);
}
裁剪图像后,您将在活动的onActivityResult中获得结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent result) {
if (requestCode == Crop.REQUEST_CROP) {
handleCrop(resultCode, result);
}
}
之后
private void handleCrop(int resultCode, Intent result) {
if (resultCode == RESULT_OK) {
ImageView.setImageURI(Crop.getOutput(result));
} else if (resultCode == Crop.RESULT_ERROR) {
Toast.makeText(this, Crop.getError(result).getMessage(), Toast.LENGTH_SHORT).show();
}
我希望这适合你。
答案 1 :(得分:0)
你可以用简单的方式做到:
首先使用意图捕捉图像,
Intent intentCamera = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intentCamera, Constants.CAMERA_REQUEST_CODE);
在onActivityResult()中,您可以捕获结果,并返回捕获的图像的网址。
然后你可以打算剪裁图像:
private void callCrop(Uri sourceImage) {
CropImageIntentBuilder cropImage = new CropImageIntentBuilder(200, 200, getURL());
cropImage.setOutlineColor(Color.WHITE);
cropImage.setSourceImage(sourceImage);
cropImage.setDoFaceDetection(false);
startActivityForResult(cropImage.getIntent(this), Constants.CROP_REQUEST_CODE);
}
你将再次获得onActivityResult()中的图像。
CropImageIntentBuilder源代码在github上。请找到以下链接
更新:
你可以通过单击按钮来触发相机的某个动作,我希望你能在活动中按下按钮。
camerBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent intentCamera = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intentCamera, Constants.CAMERA_REQUEST_CODE);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap saveBitmap = null;
if (resultCode == RESULT_OK) {
if (requestCode == Constants.CAMERA_REQUEST_CODE) {
if (data != null) {
Uri currentImageUri = data.getData();
if (currentImageUri != null) {
Bitmap currentBitmap = uriToBitmap(currentImageUri);
Bitmap rotatedBitmap = rotateImage(currentBitmap, 90); // Rotate bitmap by 90' to avoid the orientation change of image.
saveImageToFile(rotatedBitmap); // save bitmap with rotation of 90' .
callCrop(getURL());
}
} else {
return;
}
} else if (requestCode == Constants.CROP_REQUEST_CODE) {
saveBitmap = BitmapFactory.decodeFile(getFile().getAbsolutePath());
String convertedImage = Utils.bitMapToString(saveBitmap);
}
super.onActivityResult(requestCode, resultCode, data);
}
/**
* To get Bitmap from respective Uri.
*
* @param selectedFileUri
* @return bitmap
*/
private Bitmap uriToBitmap(Uri selectedFileUri) {
Bitmap image = null;
try {
ParcelFileDescriptor parcelFileDescriptor =
getContentResolver().openFileDescriptor(selectedFileUri, "r");
FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
parcelFileDescriptor.close();
} catch (IOException e) {
e.printStackTrace();
}
return image;
}
/**
* To rotate bitmap by an given angle(in degree).
*
* @param img bitmap which you want to rotate.
* @param degree
* @return rotated bitmap.
*/
private static Bitmap rotateImage(Bitmap img, int degree) {
Matrix matrix = new Matrix();
matrix.postRotate(degree);
Bitmap rotatedImg = Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, true);
img.recycle();
return rotatedImg;
}
我希望你现在能更有意义。