解决三星手机拍照后,图片旋转。

最近项目中遇到用三星手机拍照,图片会自动旋转,应该是三星内部系统的功能,然后需要是不让他旋转,找到了方法。

原理就是,获取到图片,判断它的旋转角度,然后相应的旋转回来。

在拍照的返回结果中,获取到图片的路径。

path = filePath + fileName;  //path 为拍照返回的路径

File file = new File(path);

int degree = readPictureDegree(file.getAbsolutePath());

Bitmap smallBitmap=FileUtils.compressSize(path, 800, 800);

smallBitmap = rotaingImageView(degree, smallBitmap);

saveAllPath = FileUtils.saveBitmap(smallBitmap, System.currentTimeMillis() +(Math.random() * 10000) + ".png");//质量压缩并存储得到path

ImageItem takePhoto = new ImageItem();

takePhoto.setBitmap(smallBitmap);

takePhoto.setImagePath(saveAllPath);

Bimp.tempSelectBitmap.add(takePhoto);

/**

* 尺寸压缩

* @param path 图片绝对路径

* @return degree旋转的角度

*/

public static Bitmap compressSize(final String path,final int w,final int h){

//Looper.prepare();

// TODO Auto-generated method stub

BitmapFactory.Options opts = new BitmapFactory.Options();

// 设置为ture只获取图片大小

opts.inJustDecodeBounds = true;//只读边,不读内容

opts.inPreferredConfig = Bitmap.Config.ARGB_8888;

// 返回为空

BitmapFactory.decodeFile(path, opts);

int width = opts.outWidth;

int height = opts.outHeight;

// 判断后缀名

String suffix = "";

CompressFormat format = null;

if (path.endsWith(".jpg")) {

suffix = ".jpg";

format = CompressFormat.JPEG;

} else if (path.endsWith(".jpeg")) {

suffix = ".jpeg";

format = CompressFormat.JPEG;

} else if (path.endsWith(".png")) {

suffix = ".png";

format = CompressFormat.PNG;

} else {

suffix = ".jpg";

format = CompressFormat.JPEG;

}

float scaleWidth = 0.f, scaleHeight = 0.f;

if (width > w || height > h) {//如果宽度大于 传入的宽度  或者 高度大于 传入的高度大于

// 缩放

scaleWidth = ((float) width) / w;

scaleHeight = ((float) height) / h;

}

opts.inJustDecodeBounds = false;

//缩放后的高度和宽度取最大值

float scale = Math.max(scaleWidth, scaleHeight);

opts.inSampleSize = (int) scale;//此处是最后的宽高值

Bitmap bMapRotate = BitmapFactory.decodeFile(path, opts);

if (bMapRotate!=null) {

return bMapRotate;

}

return null;

}

/**

* 读取图片属性:旋转的角度

* @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;

}

/*

*

* 旋转图片

* */

public static Bitmap rotaingImageView(int angle , Bitmap bitmap) {

//旋转图片 动作

Matrix matrix = new Matrix();

;

matrix.postRotate(angle);

System.out.println("angle2=" + angle);

// 创建新的图片

Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,

bitmap.getWidth(), bitmap.getHeight(), matrix, true);

return resizedBitmap;

}

/**

* 存储图片,返回路径

* @param bm

* @param picName

* @return

*/

public static String saveBitmap(Bitmap bm, String picName) {

try {

if (!isFileExist(picName)) {

File tempf = createSDDir("");

}

File f = new File(SDPATH, picName);

if (f.exists()) {

f.delete();

}

FileOutputStream out = new FileOutputStream(f);

bm.compress(Bitmap.CompressFormat.PNG, 100, out);

out.flush();

out.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return SDPATH + picName;

}

时间: 2024-10-18 17:19:03

解决三星手机拍照后,图片旋转。的相关文章

彻底解决android拍照后无法显示的问题

这是对上篇"android 图片拍照,相册选图,剪切并显示"的文章之后的 改进 上一篇文章虽然能解决图片的拍照剪切以及显示,但是发现他有一个缺点, 如果该程序单独运行,貌似没有任何问题, 但是把它整合到项目中后,发现有时在小米手机或者三星手机上面仍旧会失败, 原因可能是 拍照后导致内存不足,从而拍照后返回的时候,没有返回数据,导致图片显示失败,当然这是一定的概率事件. 针对这一情况做如下改变,代码如下: package com.kuiboo.xiaoyao.Activity; impo

ios系统 竖屏拍照 canvas处理后 图片旋转(利用exif.js解决ios手机上传竖拍照片旋转90度问题)

转:https://www.cnblogs.com/lovelgx/articles/8656615.html ---恢复内容开始--- 问题:html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 解决方法:利用exif.js解决ios手机上传竖拍照片旋转90度问题 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非横拍的ios照片进行角度旋转修正. 利用exif.js读取照片的拍摄信息,详见 htt

苹果html上传后图片旋转问题

最近做移动web项目但是遇到在苹果设备上html上传图片后,图片传到后台是旋转的 旋转角度不一,因此再次 读取照片时,无法正常显示,目前已经找到解决方法,至于原因看不太懂 翻译过来也是完全按照单词翻译词语不同. 但是把方法共享出来.貌似原因是苹果偷了一个懒没有对拍摄后的照片进行处理,而安卓则处理了. 旋转原因受到苹果设备拍摄角度影响,下面是解决方法.php上环境 其他的语言做相应调整即可.原理相同 http://php.net/manual/en/function.exif-read-data.

轻量级封装处理拍照剪裁解决三星手机拍照问题

Android照片处理框架,支持拍照,从相册选择照片,照片裁切与压缩的轻量级框架--TakePhoto 该框架封装了部分机型 如三星手机拍完照片旋转屏幕遇到的一些问题. 如github上面介绍的那样 只需要继承 继承TakePhotoActivity.TakePhotoFragmentActivity.TakePhotoFragment三者之一. 重写三个方法: void takeSuccess(String imagePath); void takeFail(String msg); void

解决CIFilter滤镜后图片大小和方向发生变化

调用contextWithOptions:和createCGImage: fromRect:方法创建CIContext.与以往不同的地方是CIImage没有frame与bounds属性:只有extent属性.你将非常频繁的使用这个属性作为createCGImage: fromRect:方法的第二个参数 摘自:http://www.cocoachina.com/industry/20140115/7703.html UIImage *image = [UIImage imageNamed:@"IM

解决android有的手机拍照后上传图片被旋转的问题

转至 http://blog.csdn.net/walker02/article/details/8211628 需求:做仿新浪发微博的项目,能够上传图片还有两外一个项目用到手机拍摄图片,这两个都需要把图片上传到服务器 遇到问题:有的手机拍摄的图片旋转90度,有的图片旋转了180度,有的手机是正常的,服务器要求的是正的,这样问题就来了,不能用户发个照片在微博上看到的是被旋转了的啊,另外一个项目里旋转了的图片直接匹配出现问题,这个更严重. 解决:开始的时候在网上没有找到很好的解决办法,谷歌百度的搜

三星手机拍照,丢失照片

三星部分机型拍照成功之后,在onActivityResult()中接受不到照片路径,在网上找了很久,在某高人的回复中找到答案.... 需要在manifest.xml配置中activity->configChanges添加screenSize.4.0以后新增的屏幕尺寸改变(三星手机拍照屏幕会旋转,转来转去就把数据转没了)... <activity    android:name=".activity.my.MyNewsInfoActivity_"    android:con

前端压缩图片代码,支持移动端和pc 端,还有拍照后获取到的照片

1. upload   使用者调用的方法 2. rotateImg  旋转照片,用于把iOS拍照后获取到的图片摆正 3. dataURLtoFile 将压缩后的图片转为file 对象,区分一个 blob 和 base64, 兼容哪个就用哪个 4. 得先引入  exif-js  用于拿到图片信息,确定 iOS 怎么旋转的 1 import EXIF from 'exif-js' 2 var picValue = null, 3 headerImage = '', 4 imgName = '', 5

android拍照获得图片及获得图片后剪切设置到ImageView

ok,这次的项目需要用到设置头像功能,所以做了个总结,直接进入主题吧. 先说说怎么 使用android内置的相机拍照然后获取到这张照片吧 直接上代码: Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); Uri imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory()+"/zxy/image/temp.png&qu