>>分享Android开发相关的技术 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 19003 个阅读者 刷新本主题
 * 贴子主题:  实用程序:android 处理图片工具 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-05-15 09:41:11     消息  查看  搜索  好友  邮件  复制  引用

    
     package com.wireme.activity;

     import java.io.ByteArrayOutputStream;

    import java.io.File;

    import java.io.FileNotFoundException;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import android.graphics.Bitmap;

    import android.graphics.BitmapFactory;

    import android.graphics.Canvas;

    import android.graphics.ColorMatrix;

    import android.graphics.ColorMatrixColorFilter;

    import android.graphics.Paint;

    import android.graphics.PorterDuffXfermode;

    import android.graphics.Rect;

    import android.graphics.RectF;

    import android.graphics.Bitmap.Config;

    import android.graphics.PorterDuff.Mode;

    import android.graphics.drawable.BitmapDrawable;

    import android.graphics.drawable.Drawable;

     /* *

     * 处理图片的工具类.

      */


     public  class p_w_picpathTool {

         public  static final  int LEFT =  0;

         public  static final  int RIGHT =  1;

         public  static final  int TOP =  3;

         public  static final  int BOTTOM =  4;

                     /* *  */

         /* *

         * 图片去色,返回灰度图片

         *

         * @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;

        }

                     /* *

         * 读取路径中的图片,然后将其转化为缩放后的bitmap

         *

         * @param path

          */


         public  static  void saveBefore(String path) {

            BitmapFactory.Options options =  new BitmapFactory.Options();

            options.inJustDecodeBounds =  true;

             //  获取这个图片的宽和高

            Bitmap bitmap = BitmapFactory.decodeFile(path, options);  //  此时返回bm为空

            options.inJustDecodeBounds =  false;

             //  计算缩放比

             int be = ( int) (options.outHeight / ( float)  200);

             if (be <=  0)

                be =  1;

            options.inSampleSize =  2;  //  图片长宽各缩小二分之一

             //  重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false哦

            bitmap = BitmapFactory.decodeFile(path, options);

             int w = bitmap.getWidth();

             int h = bitmap.getHeight();

            System. out.println(w +  "   " + h);

             //  savePNG_After(bitmap,path);

            saveJPGE_After(bitmap, path);

        }

                     /* *

         * 保存图片为PNG

         *

         * @param bitmap

         * @param name

          */


         public  static  void savePNG_After(Bitmap bitmap, String name) {

            File file =  new File(name);

             try {

                FileOutputStream  out =  new FileOutputStream(file);

                 if (bitmap.compress(Bitmap.CompressFormat.PNG,  100,  out)) {

                     out.flush();

                     out.close();

                }

            }  catch (FileNotFoundException e) {

                e.printStackTrace();

            }  catch (IOException e) {

                e.printStackTrace();

            }

        }

                     /* *

         * 保存图片为JPEG

         *

         * @param bitmap

         * @param path

          */


         public  static  void saveJPGE_After(Bitmap bitmap, String path) {

            File file =  new File(path);

             try {

                FileOutputStream  out =  new FileOutputStream(file);

                 if (bitmap.compress(Bitmap.CompressFormat.JPEG,  100,  out)) {

                     out.flush();

                     out.close();

                }

            }  catch (FileNotFoundException e) {

                e.printStackTrace();

            }  catch (IOException e) {

                e.printStackTrace();

            }

        }

                     /* *

         * 水印

         *

         * @param bitmap

         * @return

          */


         public  static Bitmap createBitmapForWatermark(Bitmap src, Bitmap watermark) {

             if (src ==  null) {

                 return  null;

            }

             int w = src.getWidth();

             int h = src.getHeight();

             int ww = watermark.getWidth();

             int wh = watermark.getHeight();

             //  create the new blank bitmap

            Bitmap newb = Bitmap.createBitmap(w, h, Config.ARGB_8888); //  创建一个新的和SRC长度宽度一样的位图

            Canvas cv =  new Canvas(newb);

             //  draw src into

            cv.drawBitmap(src,  0,  0,  null); //  在 0,0坐标开始画入src

             //  draw watermark into

            cv.drawBitmap(watermark, w - ww +  5, h - wh +  5,  null); //  在src的右下角画入水印

             //  save all clip

            cv.save(Canvas.ALL_SAVE_FLAG); //  保存

             //  store

            cv.restore(); //  存储

             return newb;

        }

                     /* *

         * 图片合成

         *

         * @return

          */


         public  static Bitmap potoMix( int direction, Bitmap... bitmaps) {

             if (bitmaps.length <=  0) {

                 return  null;

            }

             if (bitmaps.length ==  1) {

                 return bitmaps[ 0];

            }

            Bitmap newBitmap = bitmaps[ 0];

             //  newBitmap = createBitmapForFotoMix(bitmaps[0],bitmaps[1],direction);

             for ( int i =  1; i < bitmaps.length; i++) {

                newBitmap = createBitmapForFotoMix(newBitmap, bitmaps[i], direction);

            }

             return newBitmap;

        }

                     private  static Bitmap createBitmapForFotoMix(Bitmap first, Bitmap second,

                 int direction) {

             if (first ==  null) {

                 return  null;

            }

             if (second ==  null) {

                 return first;

            }

             int fw = first.getWidth();

             int fh = first.getHeight();

             int sw = second.getWidth();

             int sh = second.getHeight();

            Bitmap newBitmap =  null;

             if (direction == LEFT) {

                newBitmap = Bitmap.createBitmap(fw + sw, fh > sh ? fh : sh,

                        Config.ARGB_8888);

                Canvas canvas =  new Canvas(newBitmap);

                canvas.drawBitmap(first, sw,  0,  null);

                canvas.drawBitmap(second,  0,  0,  null);

            }  else  if (direction == RIGHT) {

                newBitmap = Bitmap.createBitmap(fw + sw, fh > sh ? fh : sh,

                        Config.ARGB_8888);

                Canvas canvas =  new Canvas(newBitmap);

                canvas.drawBitmap(first,  0,  0,  null);

                canvas.drawBitmap(second, fw,  0,  null);

            }  else  if (direction == TOP) {

                newBitmap = Bitmap.createBitmap(sw > fw ? sw : fw, fh + sh,

                        Config.ARGB_8888);

                Canvas canvas =  new Canvas(newBitmap);

                canvas.drawBitmap(first,  0, sh,  null);

                canvas.drawBitmap(second,  0,  0,  null);

            }  else  if (direction == BOTTOM) {

                newBitmap = Bitmap.createBitmap(sw > fw ? sw : fw, fh + sh,

                        Config.ARGB_8888);

                Canvas canvas =  new Canvas(newBitmap);

                canvas.drawBitmap(first,  0,  0,  null);

                canvas.drawBitmap(second,  0, fh,  null);

            }

             return newBitmap;

        }

                     /* *

         * 将Bitmap转换成指定大小

         *

         * @param bitmap

         * @param width

         * @param height

         * @return

          */


         public  static Bitmap createBitmapBySize(Bitmap bitmap,  int width,  int height) {

             return Bitmap.createScaledBitmap(bitmap, width, height,  true);

        }

                     /* *

         * Drawable 转 Bitmap

         *

         * @param drawable

         * @return

          */


         public  static Bitmap drawableToBitmapByBD(Drawable drawable) {

            BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;

             return bitmapDrawable.getBitmap();

        }

                     /* *

         * Bitmap 转 Drawable

         *

         * @param bitmap

         * @return

          */


         public  static Drawable bitmapToDrawableByBD(Bitmap bitmap) {

            Drawable drawable =  new BitmapDrawable(bitmap);

             return drawable;

        }

                     /* *

         * byte[] 转 bitmap

         *

         * @param b

         * @return

          */


         public  static Bitmap bytesToBimap( byte[] b) {

             if (b.length !=  0) {

                 return BitmapFactory.decodeByteArray(b,  0, b.length);

            }  else {

                 return  null;

            }

        }

                     /* *

         * bitmap 转 byte[]

         *

         * @param bm

         * @return

          */


         public  static  byte[] bitmapToBytes(Bitmap bm) {

            ByteArrayOutputStream baos =  new ByteArrayOutputStream();

            bm.compress(Bitmap.CompressFormat.PNG,  100, baos);

             return baos.toByteArray();

        }

    }

     ----------------------------
原文链接:https://blog.51cto.com/terryblog/791516

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-05-15 17:11:19 重新编辑]
  Java面向对象编程-->Java常用类(下)
  JavaWeb开发-->JSP中使用JavaBean(Ⅱ)
  JSP与Hibernate开发-->映射组成关系
  Java网络编程-->通过JDBC API访问数据库
  精通Spring-->虚拟DOM和render()函数
  Vue3开发-->Vue简介
  Android静默安装的实现
  Android 如何监听自身应用被卸载
  Android UI学习 - 用户通知-学习Android
  Android--Widget开发
  Android Application Theme的实现及管理
  Android代码混淆的实践
  Android UI学习 - Tab的学习和使用
  如何提高Android代码的安全性
  Android--Widget开发
  Scroll的原理和简单使用
  android使用工具性能优化
  Android Resource介绍和使用-学习Android
  Android开发学习笔记:Intent的简介以及属性的详解-IT的点点...
  【Android 修炼手册】Gradle 篇 -- Gradle 的基本使用
  Android 判断当前设备是手机还是平板
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。