欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-05-28 10:22:26
android 图片添加水印的实现方法 实现效果图: 手机端打水印(文字和图片)使用的是bitmap、matrix和canvas类的一些方法, 可以实现拉伸、旋转、...

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

实现效果图:

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开发的文章本站还有很多,欢迎大家搜索查阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!