public class ImageUtil { /** * 给图片加边框等 * bitmap 源图片 * radius The radius of the blur Supported range 0 25){ * radius = 25.0f; * }else if (radius * srcBitmap 原图片 * borderWidth 边框宽度 * color 边框的颜色值 */ public static Bitmap addFrameBitmap(Bitmap srcBitmap, int borderWidth, int color) { if (srcBitmap == null) { // Log.e(TAG, "the srcBitmap or borderBitmap is null"); return null; } int newWidth = srcBitmap.getWidth() + borderWidth; int newHeight = srcBitmap.getHeight() + borderWidth; Bitmap outBitmap = Bitmap.createBitmap(newWidth, newHeight, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(outBitmap); Rect rec = canvas.getClipBounds(); rec.bottom--; rec.right--; Paint paint = new Paint(); //设置边框颜色 paint.setColor(color); paint.setStyle(Paint.Style.STROKE); //设置边框宽度 paint.setStrokeWidth(borderWidth); canvas.drawRect(rec, paint); canvas.drawBitmap(srcBitmap, borderWidth / 2f, borderWidth / 2f, null); canvas.save(Canvas.ALL_SAVE_FLAG); canvas.restore(); return outBitmap; } /** * 图片按长宽压缩 */ public static Bitmap compressImageOptimizedArea(Bitmap bitmap, Integer maxH, Integer maxW) { // 获取这个图片的宽和高 float width = bitmap.getWidth(); float height = bitmap.getHeight(); // 创建操作图片用的matrix对象 Matrix matrix = new Matrix(); // 计算宽高缩放率 float scaleWidth = ((float) maxW) / width; float scaleHeight = ((float) maxH) / height; // 缩放图片动作 matrix.postScale(scaleWidth, scaleHeight); Bitmap newbitmap = Bitmap.createBitmap(bitmap, 0, 0, (int) width, (int) height, matrix, true); return newbitmap; } public static int getImageSize(Bitmap src) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //API 19 return src.getAllocationByteCount(); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {//API 12 return src.getByteCount(); } return src.getRowBytes() * src.getHeight(); } public static String getRealPathFromURI(Uri contentUri, Context context) { String res = null; String[] proj = {MediaStore.Images.Media.DATA}; Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null); if (cursor != null) { if (cursor.moveToFirst()) { int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); res = cursor.getString(column_index); } cursor.close(); } return res; } //旋转 public static Bitmap adjustPhotoRotation(Bitmap bm, final float orientationDegree) { Bitmap bm1 = null; if (bm.getHeight() < bm.getWidth()) { Matrix m = new Matrix(); m.setRotate(orientationDegree, (float) bm.getWidth() / 2, (float) bm.getHeight() / 2); m.postTranslate((bm.getHeight() - bm.getWidth()) / 2, -(bm.getHeight() - bm.getWidth()) / 2);//原点对齐 bm1 = Bitmap.createBitmap(bm.getHeight(), bm.getWidth(), Bitmap.Config.ARGB_8888); Paint paint = new Paint(); Canvas canvas = new Canvas(bm1); canvas.drawBitmap(bm, m, paint); } else { return bm; } return bm1; } /** * 裁剪图片 * * @param uri 图片的Uri */ public static Intent cropPicture(Uri uri) { Intent innerIntent = new Intent("com.android.camera.action.CROP"); innerIntent.setDataAndType(uri, "p_w_picpath/*"); innerIntent.putExtra("crop", "true");// 才能出剪辑的小方框,不然没有剪辑功能,只能选取图片 innerIntent.putExtra("aspectX", 1); // 放大缩小比例的X innerIntent.putExtra("aspectY", 1);// 放大缩小比例的X 这里的比例为: 1:1 innerIntent.putExtra("outputX", 320); //这个是限制输出图片大小 innerIntent.putExtra("outputY", 320); innerIntent.putExtra("return-data", true); innerIntent.putExtra("scale", true); return innerIntent; } //压缩并保存 public static File saveBitmap(Bitmap bitmap, String dumpFileName, int degrees) { File file = new File(getSaveDir(), dumpFileName); FileOutputStream fos = null; // 打开文件输出流 try { //大于800K的图片压缩 ByteArrayOutputStream baos = new ByteArrayOutputStream(); int options = 100;//从100开始 bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos); //遍历压缩 while (baos.toByteArray().length / 1024 > 800) { baos.reset(); options -= 10; if (options > 0) { bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos); } } //写入文件 fos = new FileOutputStream(file); fos.write(baos.toByteArray()); fos.flush(); //把图片的旋转角信息写入新文件 setPictureDegree(file.getPath(), degrees); } catch (Exception e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != bitmap) { bitmap.recycle(); bitmap = null; System.gc(); } } return file; } /** * 得到图片的旋转角度 * * @param path * @return */ 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; } /** * 将图片的旋转角度置为0 * * @param path * @return void * @Title: setPictureDegree * @date 2012-12-10 上午10:54:46 */ private static void setPictureDegree(String path, int degree) { try { ExifInterface exifInterface = new ExifInterface(path); //修正图片的旋转角度,设置其不旋转。这里也可以设置其旋转的角度,可以传值过去, //例如旋转90度,传值ExifInterface.ORIENTATION_ROTATE_90,需要将这个值转换为String类型的 String orientation_value = "1";//正常 switch (degree) { case 90: orientation_value = "6"; break; case 180: orientation_value = "3"; break; case 270: orientation_value = "8"; break; default: break; } exifInterface.setAttribute(ExifInterface.TAG_ORIENTATION, orientation_value); exifInterface.saveAttributes(); } catch (IOException e) { e.printStackTrace(); } } }
Bitmap Util
转载上一篇:利用发射进行对象赋值
下一篇:分享Util
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Pytorch util pytorch util test
老办法,直接上官网。 PyTorchpytorch.org 先安装,pytorch的安装非常人性化,网页上给出一系列选项,选择完毕后就会提示你安装命令: 我选择的conda安装,因此需要先创建一个conda环境:conda create -n pt python=3.6创建完毕之后,conda activate pt 然后运行网页上的提示命令:conda inst
Pytorch util pycharm pytorch pycharm安装pytorch pytorch mask rcnn pytorch resnet50 -
bitmap架构优化 bitmap简介
&n
bitmap架构优化 Bitmap Matrix android图像处理 android