工具类--PicUtil 图片转换计算大小

public class PicUtil {
   private static final String TAG = "PicUtil";

   /**
    * 根据一个网络连接(URL)获取bitmapDrawable图像
    * 
    * @param imageUri
    * @return
    */
   public static BitmapDrawable getfriendicon(URL imageUri) {

      BitmapDrawable icon = null;
      try {
         HttpURLConnection hp = (HttpURLConnection) imageUri
               .openConnection();
         icon = new BitmapDrawable(hp.getInputStream());// 将输入流转换成bitmap
         hp.disconnect();// 关闭连接
      } catch (Exception e) {
      }
      return icon;
   }

   /**
    * 根据一个网络连接(String)获取bitmapDrawable图像
    * 
    * @param imageUri
    * @return
    */
   public static BitmapDrawable getcontentPic(String imageUri) {
      URL imgUrl = null;
      try {
         imgUrl = new URL(imageUri);
      } catch (MalformedURLException e1) {
         e1.printStackTrace();
      }
      BitmapDrawable icon = null;
      try {
         HttpURLConnection hp = (HttpURLConnection) imgUrl.openConnection();
         icon = new BitmapDrawable(hp.getInputStream());// 将输入流转换成bitmap
         hp.disconnect();// 关闭连接
      } catch (Exception e) {
      }
      return icon;
   }

   /**
    * 根据一个网络连接(URL)获取bitmap图像
    * 
    * @param imageUri
    * @return
    */
   public static Bitmap getusericon(URL imageUri) {
      // 显示网络上的图片
      URL myFileUrl = imageUri;
      Bitmap bitmap = null;
      try {
         HttpURLConnection conn = (HttpURLConnection) myFileUrl
               .openConnection();
         conn.setDoInput(true);
         conn.connect();
         InputStream is = conn.getInputStream();
         bitmap = BitmapFactory.decodeStream(is);
         is.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
      return bitmap;
   }

   /**
    * 根据一个网络连接(String)获取bitmap图像
    * 
    * @param imageUri
    * @return
    * @throws MalformedURLException
    */
   public static Bitmap getbitmap(String imageUri) {
      // 显示网络上的图片
      Bitmap bitmap = null;
      try {
         URL myFileUrl = new URL(imageUri);
         HttpURLConnection conn = (HttpURLConnection) myFileUrl
               .openConnection();
         conn.setDoInput(true);
         conn.connect();
         InputStream is = conn.getInputStream();
         bitmap = BitmapFactory.decodeStream(is);
         is.close();

         L.i(TAG, "image download finished." + imageUri);
      } catch (IOException e) {
         e.printStackTrace();
         return null;
      }
      return bitmap;
   }

   /**
    * 下载图片 同时写到本地SD卡中
    * 
    * @param context
    * @param imageUri
    * @return
    * @throws MalformedURLException
    */
   public static Bitmap getbitmapAndwrite(String imageUri, String filePath) {
      Bitmap bitmap = null;
      try {
         // 显示网络上的图片
         URL myFileUrl = new URL(imageUri);
         HttpURLConnection conn = (HttpURLConnection) myFileUrl
               .openConnection();
         conn.setDoInput(true);
         conn.connect();

         InputStream is = conn.getInputStream();
         File cacheFile = new File(filePath);
         BufferedOutputStream bos = null;
         bos = new BufferedOutputStream(new FileOutputStream(cacheFile));
         L.i(TAG, "write file to " + cacheFile.getCanonicalPath());

         byte[] buf = new byte[1024];
         int len = 0;
         // 将网络上的图片存储到本地
         while ((len = is.read(buf)) > 0) {
            bos.write(buf, 0, len);
         }

         is.close();
         bos.close();

         // 从本地加载图片
         bitmap = BitmapFactory.decodeFile(cacheFile.getCanonicalPath());
         // String name = MD5Util.MD5(imageUri);

      } catch (IOException e) {
         L.e("图片读取错误");
         // e.printStackTrace();
      } catch (Exception e) {
         // TODO: handle exception
         e.printStackTrace();
      }
      return bitmap;
   }

   public static boolean downpic(String picName, Bitmap bitmap) {
      boolean nowbol = false;
      try {
         File saveFile = new File("/mnt/sdcard/download/weibopic/" + picName
               + ".png");
         if (!saveFile.exists()) {
            saveFile.createNewFile();
         }
         FileOutputStream saveFileOutputStream;
         saveFileOutputStream = new FileOutputStream(saveFile);
         nowbol = bitmap.compress(Bitmap.CompressFormat.PNG, 100,
               saveFileOutputStream);
         saveFileOutputStream.close();
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      } catch (Exception e) {
         e.printStackTrace();
      }
      return nowbol;
   }

   public static void writeTofiles(Context context, Bitmap bitmap,
         String filename) {
      BufferedOutputStream outputStream = null;
      try {
         outputStream = new BufferedOutputStream(context.openFileOutput(
               filename, Context.MODE_PRIVATE));
         bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
      } catch (FileNotFoundException e) {
         e.printStackTrace();
      }
   }

   /**
    * 复制单个文件
    * 
    * @param oldPath
    *            String 原文件路径 如:c:/fqf.txt
    * @param newPath
    *            String 复制后路径 如:f:/fqf.txt
    * @return boolean
    */
   public static boolean copyFile(String oldPath, String newPath) {
      boolean isok = true;
      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[1024];
            int length;
            while ((byteread = inStream.read(buffer)) != -1) {
               bytesum += byteread; // 字节数 文件大小
               // System.out.println(bytesum);
               fs.write(buffer, 0, byteread);
            }
            fs.flush();
            fs.close();
            inStream.close();
         } else {
            isok = false;
         }
      } catch (Exception e) {
         // System.out.println("复制单个文件操作出错");
         // e.printStackTrace();
         isok = false;
      }
      return isok;

   }

   /**
    * 将文件写入缓存系统中
    * 
    * @param filename
    * @param is
    * @return
    */
   public static String writefile(Context context, String filename,
         InputStream is) {
      BufferedInputStream inputStream = null;
      BufferedOutputStream outputStream = null;
      try {
         inputStream = new BufferedInputStream(is);
         outputStream = new BufferedOutputStream(context.openFileOutput(
               filename, Context.MODE_PRIVATE));
         byte[] buffer = new byte[1024];
         int length;
         while ((length = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, length);
         }
      } catch (Exception e) {
      } finally {
         if (inputStream != null) {
            try {
               inputStream.close();
            } catch (IOException e) {
               e.printStackTrace();
            }
         }
         if (outputStream != null) {
            try {
               outputStream.flush();
               outputStream.close();
            } catch (IOException e) {
               e.printStackTrace();
            }
         }
      }
      return context.getFilesDir() + "/" + filename + ".jpg";
   }

   // 放大缩小图片
   public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {
      int width = bitmap.getWidth();
      int height = bitmap.getHeight();
      Matrix matrix = new Matrix();
      float scaleWidht = ((float) w / width);
      float scaleHeight = ((float) h / height);
      matrix.postScale(scaleWidht, scaleHeight);
      Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height,
            matrix, true);
      return newbmp;
   }

   // Drawable转化为Bitmap
   public static Bitmap drawableToBitmap(Drawable drawable) {
      int width = drawable.getIntrinsicWidth();
      int height = drawable.getIntrinsicHeight();
      Bitmap bitmap = Bitmap.createBitmap(width, height, drawable
            .getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
            : Bitmap.Config.RGB_565);
      Canvas canvas = new Canvas(bitmap);
      drawable.setBounds(0, 0, width, height);
      drawable.draw(canvas);
      return bitmap;

   }

   // 获得圆角图片的方法
   public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {
      if (bitmap == null) {
         return null;
      }

      Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
            bitmap.getHeight(), Config.ARGB_8888);
      Canvas canvas = new Canvas(output);

      final int color = 0xff424242;
      final Paint paint = new Paint();
      final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
      final RectF rectF = new RectF(rect);

      paint.setAntiAlias(true);
      canvas.drawARGB(0, 0, 0, 0);
      paint.setColor(color);
      canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

      paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
      canvas.drawBitmap(bitmap, rect, rect, paint);
      return output;
   }

   // 获得带倒影的图片方法
   public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {
      final int reflectionGap = 4;
      int width = bitmap.getWidth();
      int height = bitmap.getHeight();

      Matrix matrix = new Matrix();
      matrix.preScale(1, -1);

      Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height / 2,
            width, height / 2, matrix, false);

      Bitmap bitmapWithReflection = Bitmap.createBitmap(width,
            (height + height / 2), Config.ARGB_8888);

      Canvas canvas = new Canvas(bitmapWithReflection);
      canvas.drawBitmap(bitmap, 0, 0, null);
      Paint deafalutPaint = new Paint();
      canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);

      canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);

      Paint paint = new Paint();
      LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,
            bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,
            0x00ffffff, TileMode.CLAMP);
      paint.setShader(shader);
      // Set the Transfer mode to be porter duff and destination in
      paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
      // Draw a rectangle using the paint with our linear gradient
      canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
            + reflectionGap, paint);

      return bitmapWithReflection;
   }

   /**
    * drawable资源文件下的指定文件存储的sd卡中
    * 
    * @param context
    * @param drawableId
    *            资源文件对应的id
    * @param filePath
    *            存储到sd卡的路径+图片文件名称(含后缀名)
    */
   public static void copyImage2SDCard(Context context, Integer drawableId,
         String filePath) {

      try {
         InputStream is = context.getResources().openRawResource(drawableId);
         File cacheFile = new File(filePath);
         BufferedOutputStream bos = null;
         bos = new BufferedOutputStream(new FileOutputStream(cacheFile));
         byte[] buf = new byte[1024];
         int len = 0;
         while ((len = is.read(buf)) > 0) {
            bos.write(buf, 0, len);
         }

         is.close();
         bos.close();

      } catch (IOException e) {
         L.e("图片读取错误");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

   public static Bitmap getSmallBitmap(String filePath) {

      final BitmapFactory.Options options = new BitmapFactory.Options();
      options.inJustDecodeBounds = true;
      BitmapFactory.decodeFile(filePath, options);

      // Calculate inSampleSize
      options.inSampleSize = calculateInSampleSize(options, 480, 800);

      // Decode bitmap with inSampleSize set
      options.inJustDecodeBounds = false;

      Bitmap bm = BitmapFactory.decodeFile(filePath, options);
      if (bm == null) {
         return null;
      }
      int degree = readPictureDegree(filePath);
      bm = rotateBitmap(bm, degree);
      ByteArrayOutputStream baos = null;
      try {
         baos = new ByteArrayOutputStream();
         bm.compress(Bitmap.CompressFormat.JPEG, 30, baos);

      } finally {
         try {
            if (baos != null)
               baos.close();
         } catch (IOException e) {
            e.printStackTrace();
         }
      }
      return bm;

   }

   private static int calculateInSampleSize(BitmapFactory.Options options,
         int reqWidth, int reqHeight) {
      // Raw height and width of image
      final int height = options.outHeight;
      final int width = options.outWidth;
      int inSampleSize = 1;

      if (height > reqHeight || width > reqWidth) {

         // Calculate ratios of height and width to requested height and
         // width
         final int heightRatio = Math.round((float) height
               / (float) reqHeight);
         final int widthRatio = Math.round((float) width / (float) reqWidth);

         // Choose the smallest ratio as inSampleSize value, this will
         // guarantee
         // a final image with both dimensions larger than or equal to the
         // requested height and width.
         inSampleSize = heightRatio < widthRatio ? widthRatio : heightRatio;
      }

      return inSampleSize;
   }

   private 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;
   }

   private static Bitmap rotateBitmap(Bitmap bitmap, int rotate) {
      if (bitmap == null)
         return null;

      int w = bitmap.getWidth();
      int h = bitmap.getHeight();

      // Setting post rotate to 90
      Matrix mtx = new Matrix();
      mtx.postRotate(rotate);
      return Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, true);
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值