У меня возникли проблемы с фотографиями, сделанными с камерой мобильного телефона. Когда я делаю снимок, и я его сохраняю, мой мобильный телефон показывает его с оригинальным размером, но когда я пытаюсь открыть ту же фотографию в своем приложении, она выводит повернутую фотографию, такую как:Поворот автоматически фотографий, сделанных с помощью смартфона
Оригинальная фотография:
повернутого фото:
Эта проблема возникает только тогда, когда я беру фотографии с мобильного телефона.
Я использую следующий код для выбора галереи:
private void selectImage() {
final CharSequence[] options = {"My gallery","Cancel" };
AlertDialog.Builder builder = new AlertDialog.Builder(PhotosActivity.this);
builder.setTitle("Add Photo!");
builder.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (options[item].equals("My gallery"))
{
Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 2);
}
else if (options[item].equals("Cancel")) {
dialog.dismiss();
}
}
});
builder.show();
}
Чтобы выбрать фото:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == 2) {
Uri selectedImage = data.getData();
String[] filePath = { MediaStore.Images.Media.DATA };
Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null);
c.moveToFirst();
int columnIndex = c.getColumnIndex(filePath[0]);
String picturePath = c.getString(columnIndex);
c.close();
Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath));
if (thumbnail.getWidth() > thumbnail.getHeight()) {
Matrix matrix = new Matrix();
matrix.postRotate(90);
thumbnail = Bitmap.createBitmap(thumbnail , 0, 0, thumbnail.getWidth(), thumbnail.getHeight(), matrix, true);
}
int nh = (int) (thumbnail.getHeight() * (612.0/thumbnail.getWidth()));
Bitmap scaled = Bitmap.createScaledBitmap(thumbnail, 612, nh, true);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
scaled.compress(Bitmap.CompressFormat.JPEG, 90, stream);
byte [] byte_arr = stream.toByteArray();
String image_str = Base64.encodeBytes(byte_arr);
newtask = new saveImage();
newtask.execute(image_str,sessionid);
Toast.makeText(getBaseContext(), "Nice!",
Toast.LENGTH_LONG).show();
}
}
}
Я попытался это исправить, используя следующий код, но он не работа над пейзажными фотографиями, я хотел бы получить код для вывода исходного размера.
if (thumbnail.getWidth() > thumbnail.getHeight()) {
Matrix matrix = new Matrix();
matrix.postRotate(90);
thumbnail = Bitmap.createBitmap(thumbnail , 0, 0, thumbnail.getWidth(), thumbnail.getHeight(), matrix, true);
}
Спасибо.
Я искал, как получить ориентацию, я нашел решение, я использовал эту функцию здесь: http://stackoverflow.com/questions/21085105/get-orientation-of-image -из медиа-данных-изображений-медиа-данных и измененной матрицы.postRotate (90); к matrix.postRotate (getExifOrientation (picturePath)); Сейчас работает нормально. –