bitmap+文本生成新的bitmap的实现
注:参数content为生成二维码bitmap的内容,该二维码bitmap在和文本title组合生成一个新的bitmap
package info.ecloud.merchant.util; import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect; import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.journeyapps.barcodescanner.BarcodeEncoder; import java.util.Hashtable; public class SaveImageUtils { private static final String CHARSET = "UTF-8";
/**
* 生成图片 加上title的图片
* @param content
* @param title
* @return
*/
public static Bitmap createImage(String content,String title) {
int picWidth = ;//生成图片的宽度
int picHeight = ;//生成图片的高度
int titleTextSize = ;
int textColor = Color.BLACK;
int qrWidth = ;
int qrHeight = ;
int paddingTop = ;
int paddingMiddle = ;
int paddingBottom = ; //最终生成的图片
Bitmap result = Bitmap.createBitmap(picWidth,picHeight,Bitmap.Config.ARGB_8888); Paint paint = new Paint();
paint.setColor(Color.WHITE);
Canvas canvas = new Canvas(result); //先画一整块白色矩形块
canvas.drawRect(,,picWidth,picHeight,paint); //画title文字
Rect bounds = new Rect();
paint.setColor(textColor);
paint.setTextSize(titleTextSize);
//获取文字的字宽高,以便将文字与图片中心对齐
paint.getTextBounds(title,,title.length(),bounds);
//画白色矩形块
int qrTop = paddingTop+titleTextSize+paddingMiddle;//二维码的顶部高度 //画二维码
Hashtable<EncodeHintType, Object> hints = new Hashtable<>();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.CHARACTER_SET, CHARSET);
hints.put(EncodeHintType.MARGIN, );
Bitmap image = null;
try {
BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
image = barcodeEncoder.encodeBitmap((String) content, BarcodeFormat.QR_CODE, , );
} catch (Exception e) {
e.printStackTrace();
} paint.setColor(Color.BLACK);
canvas.drawBitmap(image,(picWidth-qrWidth)/,qrTop,paint); //画文字
paint.setColor(Color.BLACK);
paint.setTextSize(titleTextSize);
int line = ;
int textTop = qrTop+qrHeight+paddingBottom;//地址的顶部高度 for (int i = ; i < line ; i++){
String[] split = title.split("-");
paint.getTextBounds(title,,split[i].length(),bounds);
canvas.drawText(split[i],picWidth/-bounds.width()/,textTop+i*titleTextSize+i*+bounds.height()/,paint);
} canvas.save();
canvas.restore(); return result;
} }
bitmap+文本生成新的bitmap的实现的更多相关文章
- android Bitmap(将视图转为bitmap对象)
1)从android的资源文件夹layout中加载xml布局文件,并把布局文件映射为Bitmap main.xml文件如下: <?xmlversion="1.0"encodi ...
- C#图片裁切,生成新图片
/// 图片裁剪,生成新图,保存在同一目录下,名字加_new,格式1.png 新图1_new.png /// </summary> /// <param name="pic ...
- Texygen文本生成,交大计算机系14级的朱耀明
文本生成哪家强?上交大提出基准测试新平台 Texygen 2018-02-12 13:11测评 新智元报道 来源:arxiv 编译:Marvin [新智元导读]上海交通大学.伦敦大学学院朱耀明, 卢思 ...
- Android从本地选择图片文件转为Bitmap,并用zxing解析Bitmap
如何从本地选择图片文件 使用Intent调用系统相册后,onActivityResult函数返回的是Uri格式的路径 /** * 打开系统相册 */ private void openSysAlbum ...
- phpword读取内容和样式 生成新的内容
table样式还未读出 正在测试中, 目前有 rows cell textrun等样式 顺序不固定 可以设定 <?php require 'vendor/autoload.php'; use P ...
- 斯坦福NLP课程 | 第15讲 - NLP文本生成任务
作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...
- 【转】Drawable /Bitmap、String/InputStream、Bitmap/byte[]
原文:http://wuxiaolong.me/2015/08/10/Drawable-to-Bitmap/ Drawable互转Bitmap Drawable转Bitmap 1234 Resourc ...
- IOS 截取图片 部分 并生成新图片
/** * 从图片中按指定的位置大小截取图片的一部分 * * @param image UIImage image 原始的图片 * @param rect CGRect rect 要截取的区域 * * ...
- 根据backup-my.cnf来生成新的事务日志文件
使用rpm包安装xtrabackup ## 安装依赖包yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-D ...
随机推荐
- Docker windows nanoserver/mysql镜像root用户密码错误
由于需要在Windows server上的Docker中部署mysql服务,为了方便起见所以在Docker hub找到了nanoserver/mysql (https://hub.docker.com ...
- C++内存管理与注意事项
内存是程序运行必不可少的资源,由操作系统分配和管理.作为程序员,我们通常做的只能是申请和归还.本文主要介绍C++内存的申请和释放(归还),以及注意事项. 1 申请和释放内存的运算符 申请 new 释放 ...
- HTML5 App商业开发实战教程 基于WeX5可视化开发平台
- (初学JS)JS基础——ATM机终端程序编写<1.0>
初步学习了JS基础,为了更好地将所学知识熟练运用,我进行了银行ATM存取款机的模拟程序编写,主要通过VScode终端实现系列操作. 我的ATM程序包括6个主要功能:1.查询余额 2.存钱 3. 取钱 ...
- [校内训练19_09_02]A
题意 给出N 个形如$f_i(x) = a_i x^2 + b_i x $的二次函数. 有Q 次询问,每次给出一个x,询问$max{\{f_i(x)\}}$.$N,Q \leq 5*10^5$. 思考 ...
- BBOTSTRAP
Bootstrap 第一步:下载 第二步: 解压缩 第三步:引入(head内部 link引入) Bootstrap 全局样式 移动设备优先:<meta name="viewport& ...
- [C语言学习笔记一]基本构架和变量
基本构架 所有的C程序都有一个 main 函数.其后包含在大括号中的是 main 函数的内容. main函数是程序的入口,程序运行后,先进入 main 函数,然后一次执行 main 函数体中的语句. ...
- 【译】SQ3R学习法则
SQ3R 观察-提问-阅读-复述-回顾 背景 SQ3R是一种理解策略,可帮助学生在阅读时思考他们正在阅读的文章. SQ3R通常被归类为学习策略,通过教导学生在初次阅读一篇文章时如何阅读和像高效读者一样 ...
- 17、Wireless
1. WLAN在物理层采用的是无线电 i. wlan采用csma/ca代替lan的csma/cd ii. 工作在半双工模式,共享带宽(无法在发送的同时接收信号) 2. WLAN会遇到的问题 ...
- 练习2-15 求简单交错序列前N项和 (15 分)
练习2-15 求简单交错序列前N项和 (15 分) 本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格 ...