В моем коде я разрешаю пользователю загружать фотографии из галереи или с камеры. Затем изображение сохраняется на сервере с помощью дооснащения. При извлечении фото всегда поворачивается на 90 градусов, если фотография сделана с помощью камеры телефона (независимо от того, вызвана ли она с помощью приложения или вызвана через камеру напрямую). Если изображения не были сделаны с использованием камеры, ориентация правильная. Как это решить?Изображение с изображениями, сохраненное на сервере, поворачивается при восстановлении
Я знаю, что если я попытался отобразить изображение напрямую, не сохранив его на сервере, и было возможно находиться в правильной ориентации, потому что я мог бы повернуть его перед отображением. Выполнение sth похоже на коды здесь: https://gist.github.com/Mariovc/f06e70ebe8ca52fbbbe2.
Но поскольку мне нужно загрузить на сервер, а затем снова загрузить с сервера. Как мне повернуть его перед сохранением на сервере, чтобы при его восстановлении он был в правильной ориентации?
Ниже некоторые части моих кодов (только некоторые обычные обработки изображений и displayAvatarInProfile() вызывается после того, как служба завершила загрузку изображения):
public void displayAvatarInProfile(String filePath) {
if(filePath != null && filePath != ""){
int targetW = mProfilePicImageView.getWidth();
int targetH = mProfilePicImageView.getHeight();
Bitmap bm = ImageStorageUtils.resizePic(filePath, targetW, targetH);
mProfilePicImageView.setImageBitmap(bm);
} else {
mProfilePicImageView.setImageBitmap(null);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == Activity.RESULT_OK) {
Uri fileUri = null;
String filePath = null;
switch(requestCode) {
case REQUEST_PICK_IMAGE:
fileUri = data.getData();
break;
case REQUEST_CAPTURE_IMAGE:
File imageFile = ImageStorageUtils.getFile(
getActivity().getResources().getString(R.string.ApptTitle),
"avatar_" + mUser.getLogin());
filePath = imageFile.getAbsolutePath();
fileUri = ImageStorageUtils.getUriFromFilePath(mContext.get(), filePath);
break;
default:
break;
}
if(fileUri != null) {
getActivity().startService(ProfileService.makeIntentUploadAvatar(
mContext.get(), mUser.getId(), fileUri));
}
}
}
public void pickImage() {
final Intent imageGalleryIntent =
new Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI)
.setType("image/*")
.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
// Verify the intent will resolve to an Activity.
if (imageGalleryIntent.resolveActivity(getActivity().getPackageManager()) != null)
// Start an Activity to get the Image from the Image Gallery
startActivityForResult(imageGalleryIntent,
DisplayProfileFragment.REQUEST_PICK_IMAGE);
}
public void captureImage() {
Uri captureImageUri = null;
try {
captureImageUri = Uri.fromFile(ImageStorageUtils.createImageFile(
mContext.get(),
getActivity().getResources().getString(R.string.ApptTitle),
"avatar_" + mUser.getLogin()));
} catch (IOException e) {
e.printStackTrace();
}
// Create an intent that will start an Activity to get
// capture an image.
final Intent captureImageIntent =
new Intent(MediaStore.ACTION_IMAGE_CAPTURE)
.putExtra(MediaStore.EXTRA_OUTPUT, captureImageUri);
// Verify the intent will resolve to an Activity.
if (captureImageIntent.resolveActivity(getActivity().getPackageManager()) != null)
// Start an Activity to capture an image
startActivityForResult(captureImageIntent,
DisplayProfileFragment.REQUEST_CAPTURE_IMAGE);
}
комментировали @greenapps, что мне нужно больше, описание:
Когда я загрузив файл, я могу это сделать:
boolean succeeded = mImpatientServiceProxy.uploadAvatar(userId, new TypedFile("image/jpg", imageFile));
При загрузке, я получаю retrofit.client.Response объект, который я тогда GE t InputStream из Response и записать данные в файл с использованием потока вывода.
final InputStream inputStream = response.getBody().in();
final OutputStream outputStream = new FileOutputStream(file);
IOUtils.copy(inputStream, outputStream);
UPDATE 05/11/2015: Почему это не дубликат существующего SOLN сов пользователь может загрузить из галереи, у не знаю, если это фотография взята из ресурсов в Интернете или с камеры, так u не может вращать изображение, когда u отображает его ...
Мы не можем видеть, что вы загружаете. Файл? Растровое изображение? Также мы не можем видеть, что вы загружаете и как. – greenapps
Привет @greenapps Пожалуйста, обратитесь к моему обновлению выше – yeeen
Возможный дубликат * [почему изображение, снятое с использованием намерения камеры, вращается на некоторых устройствах в android] (http://stackoverflow.com/questions/14066038/why-image-captured-using -Камера-намеренная получает повернутые-на-некоторые-устройств-в-андроида) *. Вы должны открыть файл Jpeg, который вы получаете в 'onActivityResult()', повернуть его, как вы пожелаете, и снова сжать его в Jpeg. –