Glide 无法识别相机的旋转
Glide doesn't recognize the rotation of the camera
我需要从 Android 上的相机加载图像。我使用此代码打开相机:
private void openCamera()
{
mMediaUri =getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
photoIntent.putExtra(MediaStore.EXTRA_OUTPUT, mMediaUri);
startActivityForResult(photoIntent, REQUEST_TAKE_PHOTO);
}
private Uri getOutputMediaFileUri(int mediaTypeImage)
{
//check for external storage
if(isExternalStorageAvaiable())
{
File mediaStorageDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
String fileName = "";
String fileType = "";
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new java.util.Date());
fileName = "IMG_"+timeStamp;
fileType = ".jpg";
File mediaFile;
try
{
mediaFile = File.createTempFile(fileName,fileType,mediaStorageDir);
absolutePath = mediaFile.getAbsolutePath();
}
catch (IOException e)
{
e.printStackTrace();
Log.i("St","Error creating file: " + mediaStorageDir.getAbsolutePath() +fileName +fileType);
return null;
}
return FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".provider", mediaFile);
}
//something went wrong
return null;
}
private boolean isExternalStorageAvaiable()
{
String state = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state))
{
return true;
}
else
{
return false;
}
}
这是 onActivityResult()
中的检查:
else if(resultCode == RESULT_OK)
{
if (requestCode == REQUEST_TAKE_PHOTO || requestCode == REQUEST_PICK_PHOTO) //dalla fotocamera
{
if (data != null) //caso galleria
{
mMediaUri = data.getData();
Glide.with(getActivity()).load(mMediaUri).centerCrop().into(photo);
}
else
{
Glide.with(getActivity())
.load(mMediaUri)
.bitmapTransform(new CenterCrop(getActivity()), new RoundedCornersTransformation(getActivity(), 15, 2))
.into(photo);
}
}
问题是在某些设备(如安装了牛轧糖的 Galaxy S4)中,Glide 会以 90 度向右加载图像,而不是正确加载图像。我读过 Glide 默认管理 ExifInterface
,但在这种情况下它不起作用。
当我使用相机加载时,我只有这个问题:使用图库或字节数组,它会以正确的模式加载所有内容。
有办法解决吗?
谢谢
终于找到问题了,是不是这两行:
fileName = "IMG_"+timeStamp;
fileType = ".jpg";
使用位图代替 Jpeg 解决问题:
fileName = "IMG_"+timeStamp;
fileType = ".bmp";
我需要从 Android 上的相机加载图像。我使用此代码打开相机:
private void openCamera()
{
mMediaUri =getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
photoIntent.putExtra(MediaStore.EXTRA_OUTPUT, mMediaUri);
startActivityForResult(photoIntent, REQUEST_TAKE_PHOTO);
}
private Uri getOutputMediaFileUri(int mediaTypeImage)
{
//check for external storage
if(isExternalStorageAvaiable())
{
File mediaStorageDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
String fileName = "";
String fileType = "";
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new java.util.Date());
fileName = "IMG_"+timeStamp;
fileType = ".jpg";
File mediaFile;
try
{
mediaFile = File.createTempFile(fileName,fileType,mediaStorageDir);
absolutePath = mediaFile.getAbsolutePath();
}
catch (IOException e)
{
e.printStackTrace();
Log.i("St","Error creating file: " + mediaStorageDir.getAbsolutePath() +fileName +fileType);
return null;
}
return FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".provider", mediaFile);
}
//something went wrong
return null;
}
private boolean isExternalStorageAvaiable()
{
String state = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state))
{
return true;
}
else
{
return false;
}
}
这是 onActivityResult()
中的检查:
else if(resultCode == RESULT_OK)
{
if (requestCode == REQUEST_TAKE_PHOTO || requestCode == REQUEST_PICK_PHOTO) //dalla fotocamera
{
if (data != null) //caso galleria
{
mMediaUri = data.getData();
Glide.with(getActivity()).load(mMediaUri).centerCrop().into(photo);
}
else
{
Glide.with(getActivity())
.load(mMediaUri)
.bitmapTransform(new CenterCrop(getActivity()), new RoundedCornersTransformation(getActivity(), 15, 2))
.into(photo);
}
}
问题是在某些设备(如安装了牛轧糖的 Galaxy S4)中,Glide 会以 90 度向右加载图像,而不是正确加载图像。我读过 Glide 默认管理 ExifInterface
,但在这种情况下它不起作用。
当我使用相机加载时,我只有这个问题:使用图库或字节数组,它会以正确的模式加载所有内容。
有办法解决吗? 谢谢
终于找到问题了,是不是这两行:
fileName = "IMG_"+timeStamp;
fileType = ".jpg";
使用位图代替 Jpeg 解决问题:
fileName = "IMG_"+timeStamp;
fileType = ".bmp";