Android 图片添加水印的实现方法
程序员文章站
2022-05-28 10:22:26
android 图片添加水印的实现方法
实现效果图:
手机端打水印(文字和图片)使用的是bitmap、matrix和canvas类的一些方法, 可以实现拉伸、旋转、...
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开发的文章本站还有很多,欢迎大家搜索查阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!