2015-11-02 3 views
0

В моем коде я разрешаю пользователю загружать фотографии из галереи или с камеры. Затем изображение сохраняется на сервере с помощью дооснащения. При извлечении фото всегда поворачивается на 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 отображает его ...

+0

Мы не можем видеть, что вы загружаете. Файл? Растровое изображение? Также мы не можем видеть, что вы загружаете и как. – greenapps

+0

Привет @greenapps Пожалуйста, обратитесь к моему обновлению выше – yeeen

+1

Возможный дубликат * [почему изображение, снятое с использованием намерения камеры, вращается на некоторых устройствах в android] (http://stackoverflow.com/questions/14066038/why-image-captured-using -Камера-намеренная получает повернутые-на-некоторые-устройств-в-андроида) *. Вы должны открыть файл Jpeg, который вы получаете в 'onActivityResult()', повернуть его, как вы пожелаете, и снова сжать его в Jpeg. –

ответ

0

Использовать камеру api вместо намерения. когда u захватывает изображение с использованием намерений, он отображает вращение. В камере api есть методы, позволяющие изменить поворот камеры, а также захваченную фотографию.

+0

Что вы подразумеваете под камерой api вместо намерения? Можете ли вы опубликовать некоторые коды или ссылки? Потому что я искал в Интернете, связанные с камерой коды, связанные с api, также использовали намерение – yeeen

+0

www.tutorialspoint.com/android/android_camera.htm. Вы поймете все, что я пытаюсь сказать ... –

+0

О, спасибо ... я видел это, это прямо ниже – yeeen

Смежные вопросы