关于一些对于图片添加水印的处理,具体方法如下:

`package yppcat.morethread;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.util.Log;
import android.view.View;

import java.io.File;
import java.io.FileOutputStream;

/**

  • Created by 殷朋朋 on 19-1-28.
    */

public class BitmapUtils {
private static final String TAG = “BitmapUtils”;
/**

 * view转成bitmap (此方法在低分辨率手机上有可能出现返回null,可选用下面的重载方法)
 *
 * @param view 指定的view
 * @return 图片大小和view大小相同
 */
public static Bitmap convertViewToBitmap(View view) {
    view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
    view.buildDrawingCache();
    Bitmap bitmap = view.getDrawingCache();
    if (bitmap == null) {
        Log.d(TAG, "bitmap is null");
        return null;
    }
    return bitmap;
}

/**
 * view 转换bitmap
 * @param view 指定的view
 * @param width 图片的宽
 * @param height 图片的高
 * @return 图片
 */
public static Bitmap convertViewToBitmap(View view, int width, int height) {
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    view.draw(new Canvas(bitmap));
    if (bitmap == null) {
        Log.d(TAG, "bitmap is null");
        return null;
    }
    return bitmap;
}

/**
 * 创建水印bitmap
 *
 * @param src       原图
 * @param watermark 水印图
 * @return 加完水印的图片
 */
public static Bitmap createWatermarkBitmap(Bitmap src, Bitmap watermark) {
    if (src == null || watermark == null) {
        return null;
    }
    int w = src.getWidth(); //获取图片的宽高
    int h = src.getHeight();
    int ww = watermark.getWidth();  //获取水印宽高
    int wh = watermark.getHeight();
    Bitmap newb = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);//创建一个新的和SRC长度宽度一样的位图
    Canvas cv = new Canvas(newb);
    cv.drawBitmap(src, 0, 0, null);//在 0,0坐标开始画入src
    cv.drawBitmap(watermark, w - ww - 5, h - wh - 5, null);//在src的右下角画入水印  位置可自定义
    cv.save(Canvas.ALL_SAVE_FLAG);//保存
    cv.restore();//存储
    return newb;
}

/**
 * 创建水印bitmap
 * @param src 原图
 */
public static Bitmap createWatermarkBitmap(Bitmap src) {
    Bitmap watermark = BitmapFactory.decodeResource(App.getContext().getResources(), R.mipmap.water_mark);
    return createWatermarkBitmap(src, watermark);
}

/**
 * 将bitmap保存到本地
 * @param path 文件目录
 * @param mBitmap 图片
 * @param quality 图片质量 0-100
 * @return 是否保存成功
 */
public static boolean saveBitmap(String path, Bitmap mBitmap, int quality) {
    File f = new File(path);
    if (f.exists())
        f.delete();

    try {
        FileOutputStream out = new FileOutputStream(f);
        mBitmap.compress(Bitmap.CompressFormat.PNG, quality, out);
        out.flush();
        out.close();
        return true;
    } catch (Exception e) {
        e.printStackTrace();
    }

    return false;
}

/**
 * 
 * @param src 原图
 * @param watermark 水印图片
 * @param paddingLeft 水平方向偏移量
 * @param paddingTop 竖直方向偏移量
 * @return 加完水印的图片
 */
public static Bitmap createWaterMaskBitmap(Bitmap src, Bitmap watermark, int paddingLeft, int paddingTop) {
    if (src == null) {
        return null;
    }
    int width = src.getWidth();
    int height = src.getHeight();
    //创建一个bitmap
    Bitmap newBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图
    //将该图片作为画布
    Canvas canvas = new Canvas(newBitmap);
    //在画布 0,0坐标上开始绘制原始图片
    canvas.drawBitmap(src, 0, 0, null);
    //在画布上绘制水印图片
    canvas.drawBitmap(watermark, paddingLeft, paddingTop, null);
    // 保存
    canvas.save(Canvas.ALL_SAVE_FLAG);
    // 存储
    canvas.restore();
    return newBitmap;
}

/**
 * 根据给定的宽和高进行拉伸
 *
 * @param origin    原图
 * @param newWidth  新图的宽
 * @param newHeight 新图的高
 * @return new Bitmap
 */
public static Bitmap scaleBitmap(Bitmap origin, int newWidth, int newHeight) {
    if (origin == null) {
        return null;
    }
    int height = origin.getHeight();
    int width = origin.getWidth();
    float scaleWidth = ((float) newWidth) / width;
    float scaleHeight = ((float) newHeight) / height;
    Matrix matrix = new Matrix();
    matrix.postScale(scaleWidth, scaleHeight);// 使用后乘
    Bitmap newBM = Bitmap.createBitmap(origin, 0, 0, width, height, matrix, false);
    if (!origin.isRecycled()) {
        origin.recycle();
    }
    return newBM;
}

/**
 * 回收bitmap
 *
 * @param bitmaps 数组
 */
public static void recycleBitmaps(Bitmap... bitmaps) {
    if (bitmaps != null && bitmaps.length > 0) {
        for (Bitmap bitmap : bitmaps) {
            if (bitmap != null) {
                if (!bitmap.isRecycled()) {
                    bitmap.recycle();
                }
                bitmap = null;
            }
        }
    }
}

}`

本文地址: http://www.yppcat.top/2019/01/29/图片加水印/