Andorid工具类-图片处理工具类

本文介绍了一个用于处理图片的工具类,包括从URL加载图片、转换为不同格式、裁剪为圆形角落、灰度处理等功能。提供了多种方法实现图片资源的有效管理和高效使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class ImageUtil {

 public static InputStream getRequest(String path) throws Exception {
  URL url = new URL(path);
  HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  conn.setRequestMethod("GET");
  conn.setConnectTimeout(5000);
  if (conn.getResponseCode() == 200){
   return conn.getInputStream();
  }
  return null;
 }

 public static byte[] readInputStream(InputStream inStream) throws Exception {
  ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
  byte[] buffer = new byte[4096];
  int len = 0;
  while ((len = inStream.read(buffer)) != -1) {
   outSteam.write(buffer, 0, len);
  }
  outSteam.close();
  inStream.close();
  return outSteam.toByteArray();
 }
 
 public static Drawable loadImageFromUrl(String url){
        URL m;
        InputStream i = null;
        try {
            m = new URL(url);
            i = (InputStream) m.getContent();
        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Drawable d = Drawable.createFromStream(i, "src");
        return d;
    }
 
 public static Drawable getDrawableFromUrl(String url) throws Exception{
   return Drawable.createFromStream(getRequest(url),null);
 }
 
 public static Bitmap getBitmapFromUrl(String url) throws Exception{
  byte[] bytes = getBytesFromUrl(url);
  return byteToBitmap(bytes);
 }
 
 public static Bitmap getRoundBitmapFromUrl(String url,int pixels) throws Exception{
  byte[] bytes = getBytesFromUrl(url);
  Bitmap bitmap = byteToBitmap(bytes);
  return toRoundCorner(bitmap, pixels);
 }
 
 public static Drawable geRoundDrawableFromUrl(String url,int pixels) throws Exception{
  byte[] bytes = getBytesFromUrl(url);
  BitmapDrawable bitmapDrawable = (BitmapDrawable)byteToDrawable(bytes);
  return toRoundCorner(bitmapDrawable, pixels);
 }
 
 public static byte[] getBytesFromUrl(String url) throws Exception{
   return readInputStream(getRequest(url));
 }
 
 public static Bitmap byteToBitmap(byte[] byteArray){
  if(byteArray.length!=0){
            return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
        }
        else {
            return null;
        } 
 }
 
 public static Drawable byteToDrawable(byte[] byteArray){
  ByteArrayInputStream ins = new ByteArrayInputStream(byteArray);
  return Drawable.createFromStream(ins, null);
 }
 
 public static byte[] Bitmap2Bytes(Bitmap bm){
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
  return baos.toByteArray();
 }
 
 public static Bitmap drawableToBitmap(Drawable drawable) {

  Bitmap bitmap = Bitmap
    .createBitmap(
      drawable.getIntrinsicWidth(),
      drawable.getIntrinsicHeight(),
      drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
        : Bitmap.Config.RGB_565);
  Canvas canvas = new Canvas(bitmap);
  drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
    drawable.getIntrinsicHeight());
  drawable.draw(canvas);
  return bitmap;
 }
 
   /**
       * 图片去色,返回灰度图片
       * @param bmpOriginal 传入的图片
      * @return 去色后的图片
      */
     public static Bitmap toGrayscale(Bitmap bmpOriginal) {
         int width, height;
         height = bmpOriginal.getHeight();
         width = bmpOriginal.getWidth();   
 
         Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
         Canvas c = new Canvas(bmpGrayscale);
         Paint paint = new Paint();
         ColorMatrix cm = new ColorMatrix();
         cm.setSaturation(0);
         ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
         paint.setColorFilter(f);
         c.drawBitmap(bmpOriginal, 0, 0, paint);
         return bmpGrayscale;
     }
    
    
     /**
      * 去色同时加圆角
      * @param bmpOriginal 原图
      * @param pixels 圆角弧度
      * @return 修改后的图片
      */
     public static Bitmap toGrayscale(Bitmap bmpOriginal, int pixels) {
         return toRoundCorner(toGrayscale(bmpOriginal), pixels);
     }
    
     /**
      * 把图片变成圆角
      * @param bitmap 需要修改的图片
      * @param pixels 圆角的弧度
      * @return 圆角图片
      */
     public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) {
 
         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);
         final float roundPx = pixels;
 
         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;
     }
 
    
    /**
      * 使圆角功能支持BitampDrawable
      * @param bitmapDrawable
      * @param pixels
      * @return
      */
     public static BitmapDrawable toRoundCorner(BitmapDrawable bitmapDrawable, int pixels) {
         Bitmap bitmap = bitmapDrawable.getBitmap();
         bitmapDrawable = new BitmapDrawable(toRoundCorner(bitmap, pixels));
         return bitmapDrawable;
     }
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值