在过去一个月左右的时间里,我一直在努力地解决这个错误。每当我认为我已修复它时,它似乎都会以某种形式返回。
这是旧的Android“图像旋转90度”错误。我在这里(StackOverFlow)上阅读了无数篇文章,还尝试了许多方法,但似乎无法修复它。
我仍然收到旋转不正确的图像。
在我的应用程序中,用户选择他/她的个人资料图片,然后将其设置为ImageView。该图像是从“电话图库”中选择的
两天前,我实现了以下代码,该代码适用于在手机上测试过的所有图像。但是,当我的Beta测试人员中的一位尝试该操作时,他的图像又被旋转了。他将图像发送给我进行测试,但这些图像在我的手机上显示正常。因此,为什么我越来越沮丧。
这是我用来获取图像方向的方法:
// Gets an Images Orientation
public static int getOrientationEXIF(Context context, Uri uri) {
int orientation = 0;
try {
ExifInterface exif = new ExifInterface(uri.getPath());
orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
orientation = 90;
return orientation;
case ExifInterface.ORIENTATION_ROTATE_180:
orientation = 180;
return orientation;
}
} catch (IOException e) {
e.printStackTrace();
}
return 0;
}
然后,我使用以下方法获得旋转的位图:
// Rotate a Bitmap
public static Bitmap rotate(float rotationValue, String filePath) {
Bitmap original= BitmapFactory.decodeFile(filePath);
int width = original.getWidth();
int height = original.getHeight();
Matrix matrix = new Matrix();
matrix.postRotate(rotationValue);
Bitmap rotated = Bitmap.createBitmap(original, 0, 0, width, height, matrix, true);
return rotated;
}
我只是不确定该怎么办了。
如果有人可以帮助我解决问题,我真的很喜欢
先感谢您
更新
实现建议的方法后,我在日志中看到了以下代码行:
JHEAD can't open 'file:/external/images/media/3885'
我不确定这是什么意思
更新#2
我想我可能已经解决了这个问题,我得到了文件的正确图像路径。
您需要考虑所有方向,而不仅仅是90或180。我正在使用
File curFile = new File("path-to-file"); // ... This is an image file from my device.
Bitmap rotatedBitmap;
try {
ExifInterface exif = new ExifInterface(curFile.getPath());
int rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
int rotationInDegrees = exifToDegrees(rotation);
Matrix matrix = new Matrix();
if (rotation != 0f) {matrix.preRotate(rotationInDegrees);}
rotatedBitmap = Bitmap.createBitmap(bitmap,0,0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
}catch(IOException ex){
Log.e(TAG, "Failed to get Exif data", ex);
}
和:
/**
* Gets the Amount of Degress of rotation using the exif integer to determine how much
* we should rotate the image.
* @param exifOrientation - the Exif data for Image Orientation
* @return - how much to rotate in degress
*/
private static int exifToDegrees(int exifOrientation) {
if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) { return 90; }
else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) { return 180; }
else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) { return 270; }
return 0;
}
我正在写一个定制的肖像相机,我在图像方向上有一些问题。具体而言,我需要始终将相机设置为纵向,并使用清单配置: Android:屏幕方向="肖像" 我在应用程序中设置: 这是有效的,因为当我旋转设备(90,180,270度)时,我可以看到(从相机预览)正确的图像。 我不在乎设备方向何时被锁定(禁用),但当它启用时,我似乎没有得到任何方向更改。我总是使用代码获得0度: 从技术上讲,我需要写入拍摄的照片
我是新的Android和工作在一个项目中,我必须使用自定义相机与覆盖图像捕获图像。 我可以用叠加(组合图像)捕获图像,但问题是叠加图像方向在保存新的组合图像后发生变化,即叠加图像主要设置在纵向模式,但在保存后显示在横向模式。 我已经搜索了很多关于如何改变可绘制图像的方向,但所有方向的改变都是针对位图图像的。若我将可绘制图像更改为位图并更改旋转,它不会显示任何覆盖图像。我不知道代码出了什么问题。我的
本文向大家介绍Python OpenCV处理图像之图像直方图和反向投影,包括了Python OpenCV处理图像之图像直方图和反向投影的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Python OpenCV图像直方图和反向投影的具体代码,供大家参考,具体内容如下 当我们想比较两张图片相似度的时候,可以使用这一节提到的技术 直方图对比 反向投影 关于这两种技术的原理可以参考我上面贴的
我知道如何检测和更改图像的方向,这是使用从设备捕获的。现在我在想,我该如何检测来自URL而非设备的图像方向? 例如,我有一个ImageLoader类,该类具有DisplayImage函数,可以将位图从URL设置为ImageView: 保存图像类 在活动中调用的DisplayFunction,用于从URL在ImageView中显示图像: 这就是我迄今为止所尝试的: 在DisplayImage方法内的
在我的应用程序中,我添加了图像上传功能,它可以很好地处理除相机图像之外的所有图像,每当我从画廊浏览相机图像时,肖像图像旋转90度。下面是我的代码片段。有人能帮我吗?我遵循了很多教程,但它们在kikat中都很好。但当同一教程不适用于ics、jellybean等时。。
我在Wordpress中创建了自定义图像大小,用于Wordpress默认安装的响应图像插件。我添加的图像大小为: 然后,我使用metabox.io插件从PHP构建图像,并将加载的图像设置为显示为纵向案例研究lg。然后,我使用metabox.io中的函数加载srcset,并创建了我想要更改图像的自定义大小。 结果如下所示: 我的问题是,它现在正在加载宽度和高度为768x512的风景图像,而不是加载5