forked from hesanwei/TakePhoto
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
0c3e1bd
commit de0cc14
Showing
2 changed files
with
105 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
102 changes: 102 additions & 0 deletions
102
takephoto_library/src/main/java/com/jph/takephoto/uitl/ImageRotateUtil.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
package com.jph.takephoto.uitl; | ||
|
||
import android.graphics.Bitmap; | ||
import android.graphics.BitmapFactory; | ||
import android.graphics.Matrix; | ||
import android.media.ExifInterface; | ||
|
||
import java.io.File; | ||
import java.io.FileNotFoundException; | ||
import java.io.FileOutputStream; | ||
import java.io.IOException; | ||
|
||
/** | ||
* 图片旋转角度修正工具类 | ||
* Author: crazycodeboy | ||
* Date: 2016/9/21 0007 20:10 | ||
* Version:3.0.0 | ||
* 技术博文:http://www.cboy.me | ||
* GitHub:https://github.com/crazycodeboy | ||
* Eamil:[email protected] | ||
*/ | ||
public class ImageRotateUtil { | ||
|
||
public static ImageRotateUtil of(){ | ||
return new ImageRotateUtil(); | ||
} | ||
|
||
private ImageRotateUtil() { | ||
} | ||
public void correctTmage(String path){ | ||
int degree; | ||
if((degree=getBitmapDegree(path))!=0){ | ||
Bitmap bitmap= BitmapFactory.decodeFile(path); | ||
if(bitmap==null)return; | ||
Bitmap resultBitmap=rotateBitmapByDegree(bitmap,degree); | ||
if(resultBitmap==null)return; | ||
try { | ||
resultBitmap.compress(Bitmap.CompressFormat.JPEG,100,new FileOutputStream(new File(path))); | ||
} catch (FileNotFoundException e) { | ||
e.printStackTrace(); | ||
} | ||
} | ||
} | ||
|
||
/** | ||
* 读取图片的旋转的角度 | ||
* | ||
* @param path 图片绝对路径 | ||
* @return 图片的旋转角度 | ||
*/ | ||
private int getBitmapDegree(String path) { | ||
int degree = 0; | ||
try { | ||
// 从指定路径下读取图片,并获取其EXIF信息 | ||
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; | ||
} | ||
|
||
/** | ||
* 将图片按照某个角度进行旋转 | ||
* | ||
* @param bm 需要旋转的图片 | ||
* @param degree 旋转角度 | ||
* @return 旋转后的图片 | ||
*/ | ||
private Bitmap rotateBitmapByDegree(Bitmap bm, int degree) { | ||
Bitmap returnBm = null; | ||
|
||
// 根据旋转角度,生成旋转矩阵 | ||
Matrix matrix = new Matrix(); | ||
matrix.postRotate(degree); | ||
try { | ||
// 将原始图片按照旋转矩阵进行旋转,并得到新的图片 | ||
returnBm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true); | ||
} catch (OutOfMemoryError e) { | ||
} | ||
if (returnBm == null) { | ||
returnBm = bm; | ||
} | ||
if (bm != returnBm) { | ||
bm.recycle(); | ||
} | ||
return returnBm; | ||
} | ||
} |