public class ImageUtil {
public static final String TAG = ImageUtil.class.getSimpleName();
/**
* 判断图片是否需要翻转(正方向的不用翻转)
*
* @param fileName
* @return
*/
public static boolean needRotate(Context context, String fileName) {
try {
ExifInterface exif = new ExifInterface(fileName);
int orientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_UNDEFINED);
LogUtil.d(TAG, "orientation is " + orientation);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
return true;
case ExifInterface.ORIENTATION_ROTATE_270:
return true;
case ExifInterface.ORIENTATION_ROTATE_180:
return true;
}
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* 获取翻转到正方向的的图片
*
* @param fileName
* @param maxWidth
* @param maxHeight
* @return
*/
public static void rotatedBitmap(Context context, String fileName,
String dstFile) {
try {
ExifInterface exif = new ExifInterface(fileName);
int orientation = exif.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_UNDEFINED);
LogUtil.d(TAG, "orientation is " + orientation);
Matrix matrix = null;
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
matrix = new Matrix();
matrix.postRotate(90);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
matrix = new Matrix();
matrix.postRotate(270);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
matrix = new Matrix();
matrix.postRotate(180);
break;
}
Bitmap bmp = getSmallBitmap(context,
Uri.fromFile(new File(fileName)));
if (matrix != null) {
Bitmap bmp2 = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(),
bmp.getHeight(), matrix, true);
bmp.recycle();
FileOutputStream fos = new FileOutputStream(dstFile);
bmp2.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.close();
bmp2.recycle();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static boolean compress(Context context, Uri src, File dst, int rate) {
try {
Bitmap bmp = getSmallBitmap(context, src);
FileOutputStream fos = new FileOutputStream(dst);
bmp.compress(Bitmap.CompressFormat.JPEG, rate, fos);
bmp.recycle();
bmp = null;
fos.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
public static int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int heightRatio = Math.round((float) height
/ (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
return inSampleSize;
}
public static Bitmap getSmallBitmap(Context context, Uri uri) {
try {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
InputStream is = context.getContentResolver().openInputStream(uri);
BitmapFactory.decodeStream(is, null, options);
is.close();
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, 720, 1280);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
is = context.getContentResolver().openInputStream(uri);
Bitmap bmp = BitmapFactory.decodeStream(is, null, options);
is.close();
return bmp;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
分享到:
相关推荐
5. 旋转图片后,更新BufferedImage对象,并将新的图像数据写回文件,同时删除原有的Exif信息,或者更新Orientation字段为正常值(1,表示无旋转)。 6. 最后,可以继续执行其他图片处理任务,如缩放、裁剪等。 以下...
调用Android系统拍照功能后,三星手机拍摄后的照片被旋转了90度,横着拍给你变成竖的,竖的拍给你变成横的。其它品牌的手机都是正常的,就三星出现这个怪事。 在Android适配上,我原来一直以为国内的小米手机够奇葩...
移动端Vue+Vant的Uploader实现上传、压缩、旋转图片功能,是利用了Vue.js框架结合Vant UI组件库中的Uploader组件来实现的。该功能主要针对移动端用户,提供了便捷的图片上传、压缩及旋转处理。以下是一些相关知识点...
* 检查并旋转图片 * * @param inputFile 输入文件 * @param outputFile 输出文件 * @throws IOException * @throws ImageReadException * @throws ImageWriteException */ public static void ...
android 解决部分手机拍照旋转问题
看到网上有很多解决关于拍照后图片旋转的问题,特别是三星的机型问题最大,但是都不能很好的解决问题,所以花时间研究了下,终于解决了拍照后图片旋转的问题,再此把代码贴出来跟大家一起研究下,有什么不对的地方还...
3. **用户端修复**:用户可以在设置中关闭“智能反转”或者手动旋转图片,但这并不是一个理想的解决方案,因为它需要用户自行操作。 4. **更新API**:开发者可以考虑更新他们的API,使其能够处理Exif元数据,确保...
H5拍照解决苹果拍照旋转H5拍照解决苹果拍照旋转H5拍照解决苹果拍照旋转
android 图片 拍照 删除 添加 旋转 @Override ... // 向右旋转图片按钮 xuanzhuan = (Button) this.findViewById(R.id.xuanzhuan); xuanzhuan.setOnClickListener(new MyXuanZhuanClick(90)); }
使用ExifInterface类,可以读取并修改图片的Exif信息,从而实现旋转图片。此外,还可以直接使用Bitmap的rotate方法进行旋转。 最后,**图片裁剪**。Android提供了Intent.ACTION_IMAGE_CROP来调用系统裁剪工具,但这...
在Android系统中,如果手机处于横屏模式拍照,EXIF信息通常会记录这一情况,以便于在查看时自动旋转图片至正确方向。然而,有些情况下,这个信息可能没有被正确地写入或读取,从而导致了照片显示异常。 解决这个...
exif.js是一个JavaScript库,用于从图像文件读取EXIF元数据。解决ios拍照出现旋转的问题
"webuploader+cropper"是解决这一问题的一个高效方案,它提供了图片裁剪、旋转以及上传的功能,并且兼容PC和H5环境。下面我们将详细探讨这个组合的实现原理和应用。 首先,`WebUploader`是由阿里团队开发的一款优秀...
当需要旋转图片时,通常会先将Bitmap对象加载到内存,然后通过Matrix类来改变其坐标系统,实现旋转效果。Matrix类提供了setRotate()方法,可以设置旋转的角度。 二、Bitmap的旋转 1. 加载Bitmap:首先需要从资源、...
"swift-一款自定义多选相册单张图片编辑旋转裁剪功能"的项目旨在提供一个自定义的相册组件,它允许用户进行多选图片,并对单个图片进行编辑,包括旋转和裁剪操作。这一功能对于社交应用、图片编辑应用或者任何需要...
上传图片压缩并且转为base64并且上传阿里云(对ios相机拍照旋转90度处理)
项目请参见:https://handsome-man.blog.csdn.net/article/details/116427984 图像平移是指将图像中所有的点都沿着水平或垂直方向移动一定的距离。 项目可直接运行~
倾斜图像霍夫变换旋转,并进行识别特定区域进行裁剪
1. **图片旋转**:Android中可以使用`Bitmap.createBitmap()`和`Matrix`类来旋转图片。首先,创建一个`Matrix`对象,设置旋转角度,然后使用这个矩阵对原始`Bitmap`进行变换。 2. **图片裁剪**:Android提供了`Crop...
利用exif.js解决IOS手机H5页面拍照上传照片旋转90度问题: upLoadPic($inputBorn, $inpOutBorn, 1); 其中$inputBorn为type="file"的input, $inpOutBorn为展示图片用的盒子,盒子要给宽高,默认的情况下,图片是以背景...