android 普通相机拍照加自己定义的水印

业务场景描述 :特殊照片防止被别人利用,需要添加水印,最近项目中要用到这一功能,记录一下

先来一张效果图:

 

思路: 

1.拍照功能就不用多说,用android 系统自带的相机拍照得到Bitmap

2.自定义要添加水印的文本内容

3.再把文本内容绘制到Bitmap上就可以

4.下面是我自己封装的一个添加水印的工具类:

public class CommonUtil {

	/**
	*
	*把自定义的文本内容生成一张Bitmapt图片
	*
	*/
    public static Bitmap CreateWatermark(String mark)
    {
        int w = 2000, h = 150;
        Bitmap waterMark = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_4444);
        Canvas canvasTemp = new Canvas(waterMark);
        Paint p = new Paint();   //画笔
        String familyName = "宋体";
        Typeface font = Typeface.create(familyName, Typeface.BOLD);
        p.setColor(Color.YELLOW);
        p.setTypeface(font);
        p.setTextSize(50);
        canvasTemp.drawText(mark, 0, 100, p);
        return waterMark;
    }
 /**
*
*把2张图片合并成一张图片
*
*/

    public static Bitmap CreateBitmapWithWatermark(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();

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

        Canvas cv = new Canvas(destMap);

        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 destMap;

    }

    // 位图存为图片 bitmap 合成水印的图片,path 保存图片的路径
    public static Boolean saveImage(Bitmap bitmap, String path)
    {
        boolean success = false;

        try
        {
            File file = new File(path);
            File folder = new File(file.getParent());
            if (!folder.exists())
            {
                folder.mkdirs();
            }
            BufferedOutputStream bos;
            bos = new BufferedOutputStream(new FileOutputStream(file));
            success = bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
            bos.flush();
            bos.close();

        }
        catch (Exception e)
        {
            e.printStackTrace();
            success = false;
        }

        return success;
    }
}

5.接下来就是调用:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  //  super.onActivityResult(requestCode, resultCode, data);
    //得到图片的路径
  if (requestCode==VISIT_DETAIL_CAMERA){
     Bitmap bitmap = null;
      try {
          bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
          // 获取水印文本 -- 日期
          String date = CommonUtil.getCurrentDateTimeString();
          // 创建水印位图
          String account = SharedUtils.getString("account");
          Bitmap waterMap = CommonUtil.CreateWatermark(date+"拍摄账号:"+account);
          // 合并水印
          Bitmap destMap = CommonUtil.CreateBitmapWithWatermark(bitmap, waterMap);
          iv_photos.setImageBitmap(destMap);//显示到ImageView上
		//保存到数据路
          if ( CommonUtil.saveImage(destMap, fullPath)){
              String visitGuid = SharedUtils.getString("visitGuid");
              fileInfo info=new fileInfo(null,fullPath,"0",System.currentTimeMillis(),visitGuid );  //0为拍照 
              dao.insert(info);
          }


      } catch (FileNotFoundException e) {
          e.printStackTrace();
      }

  }
}

大致就这样搞定图片水印添加。

 

 

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值