2017-04-26 166 views
1

我有这个代码在用户选择后在图像按钮显示图像。android - 图片旋转在图像按钮

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    super.onActivityResult(requestCode, resultCode, data); 

    Uri selectedImageUri = data.getData(); 
    if (null != selectedImageUri) { 
     // Set the image in ImageView 
     _changePicture.setImageURI(selectedImageUri); 
    } 
} 

我的问题是,当选择一个大图像时,它会显示左旋90度。我在这里找到了一些解决方案在stackoverflow.com,但我不能使用它们中的任何一个,因为它们使用“图像”,而我只使用“Uri”。

编辑: 使用代码像这样的:

public static void rotateImageIfRequired(Uri selectedImage) throws IOException { 

     ExifInterface ei = new ExifInterface(selectedImage.getPath()); 
     int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); 

     switch (orientation) { 
      case ExifInterface.ORIENTATION_ROTATE_90: 
       Log.e(TAG,"ROTATE = 90"); 
      case ExifInterface.ORIENTATION_ROTATE_180: 
       Log.e(TAG,"ROTATE = 180"); 
       //return rotateImage(img, 180); 
      case ExifInterface.ORIENTATION_ROTATE_270: 
       Log.e(TAG,"ROTATE = 270"); 
       //return rotateImage(img, 270); 
      default: 
       Log.e(TAG,"ROTATE = 0"); 
       //return img; 
     } 
    } 

“ROTATE = 0” 被返回。一些图像是几天前拍摄的。他们都很大。在小图像中不发生旋转。

+2

其分毫用imagebutton做。我假设你正在从相机中获取图片?您需要以您想要的方向请求它,或者自己手动旋转并重新保存它 – Blundell

+0

我知道这一点。我不知道怎么做。 –

回答

1

你尝试过使用毕加索图书馆吗? (http://square.github.io/picasso/)。如果您想了解更多信息,可以在GitHub上关注他们的示例。

对于从设备可以使用加载图像:文件F =新的文件( “路径到图像/ image.png”)

或 文件f =新的文件(URI)

。Picasso.with(getActivity())负荷(F).into(ImageView的);

或 Picasso.with(getActivity()).load(uri).into(imageView);

毕加索还提供IMAGE TRANSMORMATIONS:

Picasso.with(上下文) .load(URL) .resize(50,50) .centerCrop() .into(ImageView的)

+0

非常感谢!这对我来说工作得很好! –

+0

很高兴能帮到你!快乐编码! :) –