java - 从相机意图图像捕获图像在某些设备Android中旋转
问题描述
我试图上传用户的个人资料。在应用程序中,用户可以从图库或相机中进行选择。
当我从相机捕捉图像时,图像正在旋转。我尝试使用 exifinterface,但方向为 0,它在某些设备上运行良好。如何解决这个问题有人可以帮助我吗?
xml
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/profile_image"
app:placeholderImage="@drawable/defaultprofile1"
app:placeholderImageScaleType="fitCenter"
app:roundingBorderColor="@color/browser_actions_bg_grey"
fresco:roundAsCircle="true"
android:layout_width="110dp"
android:layout_height="110dp"
android:scaleType="fitCenter" />
代码
draweeView3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick (View view){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
ActivityCompat.requestPermissions(Objects.requireNonNull(getActivity()), new
String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA},
REQUEST_CAMERA_PERMISSION);
selectImage();
}
}
});
private void selectImage() {
final CharSequence[] options = {"Take Photo", "Choose from Gallery", "Cancel"};
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Upload Photo!");
builder.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (options[item].equals("Take Photo")) {
Intent takePicture = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePicture, 0);
}
}
});
builder.show();
}
@SuppressLint("LongLogTag")
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == 0) {
if (data != null) {
Bitmap selectedImage = (Bitmap) data.getExtras().get("data");
System.out.println("imagebitmap" + selectedImage);
Uri tempUri = getImageUri(Objects.requireNonNull(getContext()), selectedImage);
System.out.println("tempUri" + tempUri);
String picturePath = getRealPathFromURI(tempUri);
System.out.println("paaaaaaaa" + picturePath);
File f = new File(picturePath);
String imageName = f.getName();
System.out.println("file f" + f);
Uri imageUri = Uri.fromFile(new File(picturePath));// For files on device
draweeView3.setImageURI(imageUri);
}
}
}
}
public Uri getImageUri(Context inContext, Bitmap inImage) {
Bitmap OutImage = Bitmap.createScaledBitmap(inImage, 1000, 1000, true);
String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), OutImage, "Title", null);
return Uri.parse(path);
}
public String getRealPathFromURI(Uri uri) {
String path = "";
if (getActivity().getContentResolver() != null) {
Cursor cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
path = cursor.getString(idx);
System.out.println("final path" + path);
cursor.close();
}
}
return path;
}
解决方案
推荐阅读
- ios - 如何安装 ipa 文件(无需越狱)
- javascript - TypeScript 错误:“类型 'number' 不可分配给类型 '0 | 1 | 2'”。为什么我会收到此错误?
- r - 在 github 上的包 README.md 中允许徽章但在 CRAN 版本中不允许徽章的解决方法
- typescript - 结合 import,在 typescript 声明文件中声明关键字
- python - 在熊猫数据框中按组分组数据
- swift - 表格单元格中的活动指示器视图
- c# - SignalR 核心 - 状态代码:404,ReasonPhrase:“未找到”,版本:1.1
- jquery - jQuery 调用不工作与 ajax 调用工作的奇怪问题
- android-studio - 如何阻止 Android Studio 尝试安装 Android SDK 更新?
- c# - 有没有办法强制 Intellisense 重新评估可用的过载?