Android 三星手机拍照图片旋转处理

news/2024/12/2 14:34:28/

     三星拍照后,图片竟然是旋转的,众多手机唯有三星拍照是旋转的,但是你又不能不处理。

   首先你要先判断这张图片有木有旋转,图片都是自带这些信息的,方法如下:


 /*** 读取图片属性:旋转的角度** @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;}

当然三星手机拍照一般都是:

degree = 90;

如果degree != 0 ,就说明图片是旋转的。假设我们需要发送一张图片,不可能对原来路径下的图片进行修改,所以需要把要处理的图片在复制一份再进行处理;方法如下:


/*** 复制文件** @param oldPath* @param newPath*/public static void copyFile(String oldPath, String newPath) {try {int bytesum = 0;int byteread = 0;File oldfile = new File(oldPath);if (oldfile.exists()) { //文件存在时InputStream inStream = new FileInputStream(oldPath); //读入原文件FileOutputStream fs = new FileOutputStream(newPath);byte[] buffer = new byte[1444];int length;while ((byteread = inStream.read(buffer)) != -1) {bytesum += byteread; //字节数 文件大小System.out.println(bytesum);fs.write(buffer, 0, byteread);}inStream.close();}} catch (Exception e) {System.out.println("复制单个文件操作出错");e.printStackTrace();}}

最后再对相应的图片做旋转处理,先贴上图片旋转的处理方法:

 /*** 旋转图片** @param angle* @param bitmap* @return Bitmap*/public static Bitmap rotaingImageView(int angle, Bitmap bitmap) {// 旋转图片 动作Matrix matrix = new Matrix();matrix.postRotate(angle);// 创建新的图片Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,bitmap.getWidth(), bitmap.getHeight(), matrix, true);return resizedBitmap;}


这里传入相应的角度和bitmap就行,最后贴上图片旋转处理的全部代码:

/*** 旋转的图片生成正的** @param path*/public static void rotaingDegreeImage(String path) {BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();//获取宽高度bitmapOptions.inJustDecodeBounds = true;BitmapFactory.decodeFile(path, bitmapOptions);/*** 计算sampleSize最优值*/bitmapOptions.inSampleSize = computeSampleSize(bitmapOptions, -1, 2048 * 1536);bitmapOptions.inJustDecodeBounds = false;int degree = readPictureDegree(path);Bitmap cameraBitmap = BitmapFactory.decodeFile(path, bitmapOptions);/*** 把图片旋转为正的方向*/cameraBitmap = rotaingImageView(degree, cameraBitmap);FileOutputStream out;try {out = new FileOutputStream(path);cameraBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

这里还用到:
computeSampleSize()

 /*** 计算sampleSize最优值** @param options* @param minSideLength* @param maxNumOfPixels* @return*/public static int computeSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) {int initialSize = computeInitialSampleSize(options, minSideLength, maxNumOfPixels);int roundedSize;if (initialSize <= 8) {roundedSize = 1;while (roundedSize < initialSize) {roundedSize <<= 1;}} else {roundedSize = (initialSize + 7) / 8 * 8;}return roundedSize;}

中间调用:

 private static int computeInitialSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) {double w = options.outWidth;double h = options.outHeight;int lowerBound = (maxNumOfPixels == -1) ? 1 : (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));int upperBound = (minSideLength == -1) ? 128 : (int) Math.min(Math.floor(w / minSideLength), Math.floor(h / minSideLength));if (upperBound < lowerBound) {// return the larger one when there is no overlapping zone.return lowerBound;}if ((maxNumOfPixels == -1) && (minSideLength == -1)) {return 1;} else if (minSideLength == -1) {return lowerBound;} else {return upperBound;}}

有了这几个方法。一切OK。



http://www.ppmy.cn/news/122359.html

相关文章

一寸照片快照多少钱_去照相馆拍照一般多少钱

Q1:去照相馆照个一般的艺术照大概花多少钱啊 要看的东西很多,比如说照相馆的档次,照片的拍的张数,服装套数,发型,化妆,出册,或者照片放大,或更改相框材质等,价钱都是不等的。我4,5月份去照了,本来说几百块,后来花了一千多,还是在我努力克制自己的情况下呢。不然四…

android 三星手机拍照报错

是这些手机的相机程序在保存照片的时候都会加一些特效&#xff0c;尤其是那个旋转&#xff0c;导致前面的Activity重新onCreate了。 解决方案&#xff1a; 在清单文件的Activity中加入属性&#xff08;必须&#xff09;android:configChanges"orientation|screenSize|…

三星c1116 android5.0,三星GALAXY K zoom趣味拍照功能体验

如今手机厂商对手机的拍照功能越来越看重,在手机摄像头硬件以及软件方面都进行了非常大的革新,以使得自己的产品在拍照功能方面能够带给消费者更好的体验。 去年,三星为我们带来了拥有十倍光学变焦镜头的“怪兽级”拍照手机——三星GALAXY Zoom。时隔一年,三星为我们带来了…

android三星拍照不够,拍照实用但不够便携 三星 K zoom评测

​​​​三星从来不缺乏对跨界产品不断尝试的热情。从能打电话的平板手机,到能将屏幕画面投射在墙壁上的投影手机,再到我们今天的主角:三星GALAXY K zoom,一款具备10倍光学变焦及丰富拍照功能的相机手机,三星已经数次期望用产品融合的方式来对智能手机进行必要的差异化。 …

解决三星拍照横屏问题

三星手机的问题 :竖着拍照 ,保存的照片确是横着的, 下面上代码, /*** file: 照片文件* quality:新生成的照片压缩质量*/Throws(FileNotFoundException::class)fun compressImageAndSave(file: File, quality: Int): String {var bm BitmapFactory.decodeFile(file.absolute…

Java多线程锁技术漫谈:乐观锁VS悲观锁

**Java多线程技术一直是Java程序员必备的核心技能之一。在Java多线程编程中&#xff0c;为了保证数据的一致性和安全性&#xff0c;常常需要使用锁的机制来防止多个线程同时修改同一个共享资源。锁是实现并发访问控制的一种机制&#xff0c;多线程之间共同访问共享资源的时候&a…

如何使用Vue CLI来创建和管理Vue项目

Vue CLI是Vue.js官方提供的脚手架工具&#xff0c;它可以快速轻松地创建、配置和管理Vue项目。接下来&#xff0c;让我们了解一下如何使用Vue CLI吧&#xff01; 首先&#xff0c;你需要确保已经安装了Node.js和npm。如果没有&#xff0c;请先访问https://nodejs.org/下载并安…

广通优云徐育毅:筑基数字化,打造中国IT运维新范式

2023年2月&#xff0c;中共中央、国务院印发《数字中国建设整体布局规划》&#xff0c;数字技术与经济、政治、文化、社会等各领域融合愈发紧密&#xff0c;一册百花齐放、生机勃勃的数字化图卷正徐徐展开。 随着数字中国战略深入推进&#xff0c;IT运维作为核心领域受到关注。…