Android把文字写到图片上生成图片+文字的新图片
我们项目最近需要微信分享员工二维码功能,二维码图片直接使用zxing就可以生成,但是生成之后只有一个图片,而我们需求的要求是这样的:
没错就是二维码下边有一行提示文字,你可能会想直接imageview下边放个textview就行了,没错这样在你的APP里显示效果确实是达到了,但是还要在二维码分享到朋友圈或者其他朋友时也是这个样子的啊,所以没办法,只能是得到二维码图片时再重新创建一张图片把文字也画上来,分享的时候就分享新图片就可以了,这个实现起来也很简单的,下面就来说说怎么画。
思路:
1.获取到二维码图片的高度bitmapHeight宽度bitmapWidth;
2.根据文字大小计算出二维码宽度的一行可以放多少个文字count,然后根据文字长度和count计算出需要几行来显示文字;
3.之后新建一个Bitmap对象,它的宽度就是图片宽度,高度是图片高度+配文与图片间的间距+文字大小*文字行数+文字间的行间距*文字行数;
4.以Bitmap构建画布对象,先将二维码画上来,然后在二维码下边画出以配文与图片间的间距+文字大小*文字行数+文字间的行间距*文字行数为高度的一个白底矩形,用来盛放文字(这里说一下为什么要画这个矩形,是因为我们的项目要求可以保存这张图片,而保存到相册后,手机相册背景是黑色的,我们不画这个白色矩形背景的话,文字默认背景就是透明的,而文字如果设置成黑色,这时候就会感觉你的图片只有二维码没有下边的配文了,不符合要求,也不美观);
5.用一个循环来画出文字,返回新的图片。
思路就是这些了,我觉得我说的很细了,下边就看看代码吧,我写注释都很详细,就不再另外介绍了:
主要变量含义
/**传递进来的源图片*/ private Bitmap source; /**图片的配文*/ private String text; /**图片加上配文后生成的新图片*/ private Bitmap newBitmap; /**配文的颜色*/ private int textColor = Color.BLACK; /**配文的字体大小*/ private float textSize = 16; /**图片的宽度*/ private int bitmapWidth; /**图片的高度*/ private int bitmapHeight; /**画图片的画笔*/ private Paint bitmapPaint; /**画文字的画笔*/ private Paint textPaint; /**配文与图片间的距离*/ private float padding = 20; /**配文行与行之间的距离*/ private float linePadding = 5;
主要代码
bitmapWidth = source.getWidth(); bitmapHeight = source.getHeight(); //一行可以显示文字的个数 int lineTextCount = (int) ((source.getWidth()-50)/textSize); //一共要把文字分为几行 int line = (int) Math.ceil(Double.valueOf(text.length())/Double.valueOf(lineTextCount)); //新创建一个新图片比源图片多出一部分,后续用来与文字叠加用 newBitmap = Bitmap.createBitmap(bitmapWidth, (int) (bitmapHeight+padding+textSize*line+linePadding*line), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(newBitmap); //把图片画上来 canvas.drawBitmap(source,0,0,bitmapPaint); //在图片下边画一个白色矩形块用来放文字,防止文字是透明背景,在有些情况下保存到本地后看不出来 textPaint.setColor(Color.WHITE); canvas.drawRect(0,source.getHeight(),source.getWidth(), source.getHeight()+padding+textSize*line+linePadding*line,textPaint); //把文字画上来 textPaint.setColor(textColor); textPaint.setTextSize(textSize); Rect bounds = new Rect(); //开启循环直到画完所有行的文字 for (int i=0; i<line; i++) {String s; if (i == line-1) {//如果是最后一行,则结束位置就是文字的长度,别下标越界哦 s = text.substring(i*lineTextCount, text.length()); } else {//不是最后一行 s = text.substring(i*lineTextCount, (i+1)*lineTextCount); }//获取文字的字宽高以便把文字与图片中心对齐 textPaint.getTextBounds(s,0,s.length(),bounds); //画文字的时候高度需要注意文字大小以及文字行间距 canvas.drawText(s,source.getWidth()/2-bounds.width()/2, source.getHeight()+padding+i*textSize+i*linePadding+bounds.height()/2,textPaint); }canvas.save(Canvas.ALL_SAVE_FLAG); canvas.restore();
Android把文字写到图片上生成图片+文字的新图片相关推荐
- 在图片上添加文字并生成图片
在图片上添加文字并生成图片 开发工具与关键技术:Visual Studio 2015 作者:李德新 撰写时间:2019年6月04日 在我们的日常生活中,我们经常能看到各样格式的表单,而且有时候我们还要 ...
- 图片上的文字用CSS写出毛玻璃效果
图片上的文字用CSS写出毛玻璃效果 2016-10-04 08:11 网页设计 标签:css 1297 发表评论 半透明颜色最初的使用场景之一就是作为背景.将其叠放在照片类或其他 ...
- C#实现图片叠加,图片上嵌入文字,文字生成图片的方法
/// <summary> /// 图片叠加 /// </summary> /// <param name="sender"& ...
- android 长按 秒事件_原来手机长按2秒,能开启5个实用功能,一键提取图片上的文字...
分享最实在的玩机技巧,洞察最前沿的科技资讯!大家好,这里是手机科技园! 随着科技的发展,手机上的功能越来越多,而且还非常实用,我也是今天才知道,原来手机长按2秒,能开启5个实用功能,感兴趣的朋友可以了 ...
- python3识别图中的文字_Python3.x:如何识别图片上的文字
Python3.x:如何识别图片上的文字 安装pytesseract库,必须先安装其依赖的PIL及tesseract-ocr,其中PIL为图像处理库,而后面的tesseract-ocr则为google ...
- iOS在图片上添加文字 图片
图片上添加文字,在网上找的都是iOS10弃用的一个方法(怕以后麻烦就找了另一种方法替代)弃用链接 简洁版 - (UIImage*)text:(NSString*)text addToImage:(UI ...
- Java实现在图片上添加文字(水印)
今天分享一个:通过Java代码,给图片添加文字. 比如下面这个图片,我们在左下角就添加了一个文字版的水印,那么这是如何实现的呢 ? 目录 [1]获取原图片对象 (1.1)读取本地图片 (1.2)读取网 ...
- html和css的图片怎么加,html+css如何在图片上添加文字
html+css如何在图片上添加文字 2018-09-14 效果如图 思路:div相对定位. 图片默认定位, 文字绝对定位 参考代码 html> /*div1下面 包含着1个图片和1段文字*/ ...
- 通过opencv在图片上加上文字_基于Ubuntu16
本文主要介绍,如何通过**C++**语言在Ubuntu操作系统下的OpenCV中将一个图片叠加上文字 通过opencv在图片上叠加上文字 一.汉字点阵字库原理 1.汉字的三种编码 1.1区位码 1.2 ...
最新文章
- 关于软件产业的两个契机
- HP-UX Root密码被锁定的非关机情况下解决方案
- Logon database Tiger引起DataGuard不同步问题
- Ubuntu下eclipse indigo版在线安装hibernate插件
- 7.7. 其他证书工具
- html单页面显示多个文章,从单个html页面上的多个django应用模型获取数据
- 解决Windows安装TensorFlow报错:ERROR: Cannot uninstall 'wrapt'问题
- Prometheus的promql符号表示
- excel怎么在柱状图上加超链_如何让你的年终总结更符合领导心意,高薪员工必备的excel技能...
- 本地修改指向服务器,本地修改指向服务器
- error:bucket is protected
- 【智慧城市】GIS数据获取-获取道路/水路数据
- 开关三极管的导通和截止条件
- 【存储数据恢复】esx vmfs的互斥导致存储数据丢失的数据恢复案例
- 2022年端午送祝福语小程序源码+可对接流量主
- html5 show 案例
- 干货福利分享:pdf怎么去水印 如何在线去除PDF水印
- 大数据实战之用户画像概念、项目概述及环境搭建
- 校尉羽书飞瀚海,顺序表中增删改(Pt.2)
- java+jsp+servlet+sqlserver(mysql)出租车管理系统
热门文章
- probability是什么意思_probability是什么意思_probability怎么读_probability翻译_用法_发音_词组_同反义词_可能性-新东方在线英语词典...
- 郑州大学计算机系1996级校友,美术学院:1996级校友毕业二十周年返校聚会
- github 遇到的问题
- 2021年大数据发展十大趋势:抓准一个,就能掌握先机!
- 【调音小栈】普瑞声纳Revelator io24直播关联机架驱动跳线设置教程
- Hadoop之——机架感知配置
- 昱琛航空IPO被终止:曾拟募资5亿 郭峥为大股东
- 基于Eclipse IDE断点不能停下的问题解决(断点标志上带斜杠)
- 2022iqvia药品公司排名
- Boxes Packing