在Android开发过程中,几乎每个应用都会或多或少的涉及到对图片的处理。经常遇到的一个情况就是,取得的图片是横着的,而实际需要的图片是正着的,也就是竖着的。这里就涉及到对图片横坚情况的判断,也就是图片的当前的角度。然后根据角度来纠正,得到想要的图片。

在Android的源代码里提供了一个专门读写图片信息的类ExifInterface,官方给出的注释为:This is a class for reading and writing Exif tags in a JPEG file ,可见ExifInterface是专门用来读写JPEG图片文件Exif信息的类。

Exif信息里面就包括了角度,GPS经纬度,白平衡,闪光灯等信息。ExifInterface的用法相对简单,只有一个带参的构造方法,将图片文件地址传过去就可以了。类里提供了getAttribute方法来取得各种属性,当得也可以用setAttribute方法来为已存在的图片设置或修改其本来属性。

下面贴上代码:

/** * 读取图片属性:旋转的角度 * @param path 图片绝对路径 * @return degree旋转的角度 */public static int readPictureDegree(String path) {int degree = 0;try {ExifInterface exifInterface = new ExifInterface(path);int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,ExifInterface.ORIENTATION_NORMAL);switch (orientation) {case ExifInterface.ORIENTATION_ROTATE_90:degree = 90;break;case ExifInterface.ORIENTATION_ROTATE_180:degree = 180;break;case ExifInterface.ORIENTATION_ROTATE_270:degree = 270;break;}} catch (IOException e) {e.printStackTrace();return degree;}return degree;}

能过以上方法得到图片角度后,就可以通过Matrix类对图片进行纠正了,还是贴上完整的代码,如下:

/** * 旋转图片,使图片保持正确的方向。 * @param bitmap 原始图片 * @param degrees 原始图片的角度 * @return Bitmap 旋转后的图片 */public static Bitmap rotateBitmap(Bitmap bitmap, int degrees) {if (degrees == 0 || null == bitmap) {return bitmap;}Matrix matrix = new Matrix();matrix.setRotate(degrees, bitmap.getWidth() / 2, bitmap.getHeight() / 2);Bitmap bmp = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);if (null != bitmap) {bitmap.recycle();}return bmp;}

通过以上两个步骤,就可以得到一个正着的图片了。当然中间省略了一步:

   Bitmap bmp =BitmapFactory.decodeFile(imageFilePath);




更多相关文章

  1. 制作一款简单的网络图片查看器
  2. Android车轮之图片加载框架Android-Universal-Image-Loader
  3. Android原生分享功能的思考与实现
  4. Android实现遮罩层(蒙板)效果
  5. 自动释放内存!Facebook推出强大Android图片库Fresco
  6. Android加载大图防止OOM
  7. Android图片压缩浅谈
  8. android 3D 游戏实现之First Step
  9. android扫描sdcard中的音视频及图片等文件

随机推荐

  1. 存储卡出现“无法访问此卷不包含可识别的
  2. 求助损坏打不开怎样才能把磁盘修好
  3. uniapp获取并修改原生搜索框的占位内容
  4. 损坏打不开 chkdsk无法修复. 不知道怎么
  5. laravel8 模型工厂数据填充填坑
  6. U盘插上时显示请将磁盘插入驱动器请问如
  7. flex 基础
  8. 常用数据库操作指令
  9. 遇到位置不可用,无法访问参数错误怎么解决
  10. 谷歌浏览器安装postman插件并与Intercept