当前位置: 移动技术网 > 移动技术>移动开发>Android > Android 图片添加水印的实现方法

Android 图片添加水印的实现方法

2019年07月24日  | 移动技术网移动技术  | 我要评论

android 图片添加水印的实现方法

实现效果图:

手机端打水印(文字和图片)使用的是bitmap、matrix和canvas类的一些方法, 可以实现拉伸、旋转、位移等等效果。 原理很简单, 就是在画布canvas上绘制图形、图片、文字等等, 得到你想要的效果图片。

百度搜索图片打水印有很多结果, 没找到斜着打水印的代码,有很多公司都要求上图的效果, 所以写着玩玩。

 /*
   添加全屏斜着45度的文字
   /
  public static bitmap drawcenterlable(context context, bitmap bmp, string text) {
    float scale = context.getresources().getdisplaymetrics().density;
    //创建一样大小的图片
    bitmap newbmp = bitmap.createbitmap(bmp.getwidth(), bmp.getheight(), config.argb_8888);
    //创建画布
    canvas canvas = new canvas(newbmp);
    canvas.drawbitmap(bmp, 0, 0, null);  //绘制原始图片
    canvas.save();
    canvas.rotate(45); //顺时针转45度
    paint paint = new paint(paint.anti_alias_flag);
    paint.setcolor(color.argb(50, 255, 255, 255)); //白色半透明
    paint.settextsize(100 scale);
    paint.setdither(true);
    paint.setfilterbitmap(true);
    rect recttext = new rect();  //得到text占用宽高, 单位:像素
    paint.gettextbounds(text, 0, text.length(), recttext);
    double beginx = (bmp.getheight()/2 - recttext.width()/2) * 1.4;  //45度角度值是1.414
    double beginy = (bmp.getwidth()/2 - recttext.width()/2) * 1.4;
    canvas.drawtext(text, (int)beginx, (int)beginy, paint);
    canvas.restore();
    return newbmp;
  }

使用44kb的png图片验证效率:

long begin = system.currenttimemillis();
bitmap destbmp = imageutil.drawcenterlable(this, sourbitmap, "某某公司专用");
long end = system.currenttimemillis();
log.d("brycegao", "打水印用时:" + (end-begin) + "毫秒");
mwartermarkimage.setimagebitmap(destbmp);

小米4手机输出: d/brycegao: 打水印用时:69毫秒

使用3m字节的jpg图片测试打水印,报oom错误。

 java.lang.outofmemoryerror: failed to allocate a 467251212 byte allocation with 16767536 free bytes and 110mb until oom
                                        at dalvik.system.vmruntime.newnonmovablearray(native method)
                                        at android.graphics.bitmapfactory.nativedecodeasset(native method)
                                        at android.graphics.bitmapfactory.decodestream(bitmapfactory.java:613)
                                        at android.graphics.bitmapfactory.decoderesourcestream(bitmapfactory.java:446)
                                        at android.graphics.bitmapfactory.decoderesource(bitmapfactory.java:469)
                                        at android.graphics.bitmapfactory.decoderesource(bitmapfactory.java:501)

手机端使用android原生方法打水印, 应该先将压缩分辨率, 避免oom的情况, 但是影响清晰度; 大部分app都是将原图传到服务器, 在后台打水印。

因为原生方法有分辨率和内存限制, 听说七牛的图片库(支持打水印)很好用, 看看是否可以落地到各种配置的android手机中。

以上就是对android 添加水印的方法详解,关于android开发的文章本站还有很多,欢迎大家搜索查阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网