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 ...
随机推荐
- c# 三种计算程序运行时间的方法
三种计算c#程序运行时间的方法第一种:利用 System.DateTime.Now // example1: System.DateTime.Now method DateTime dt1 = Sys ...
- PlayCanvas PBR材质shader代码分析(pixel shader)
#version es #define varying in out highp vec4 pc_fragColor; #define gl_FragColor pc_fragColor #defin ...
- Spring事务梳理
Spring事务传播行为 概述 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为 事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数 ...
- Ubuntu通过终端命令行换阿里源
检查Ubuntu系统的Codename $ lsb_release -a 得到结果: No LSB modules are available. Distributor ID: Ubuntu Desc ...
- Informatica9.5.1配置域名错误(ICMD_10033,INFASETUP_10002,RSVCSHARED_00021)
错误信息: OutPut : [ICMD_10033] Command [defineDomain] failed with error [[INFASETUP_10002] Cannot creat ...
- SpringMVC 上传文件 MultipartFile 转为 File
在使用 SpringMVC 上传文件时,接收到的文件格式为 MultipartFile,但是在很多场景下使用都需要File格式的文件,记录下以便日后使用. 以下mFile为MultipartFile文 ...
- 8、OSPF
OSPF ---最短路径优先 用于在单一自治系统(Autonomous System-AS)内决策路由 自制系统(AS)AS: 执行统一路由策略的一组网络设备的组合可适应大规模的网络: · 路由 ...
- ipwry源码
qqwry.ipwry都是cnss(http://blog.csdn.net/cnss/article/details/136069)出品,终于找到了源码,下载地址:http://download.c ...
- 2018icpc徐州网络赛-H Ryuji doesn't want to study(线段树)
题意: 有n个数的一个数组a,有两个操作: 1 l r:查询区间[l,r]内$a[l]*(r-l+1)+a[l+1]*(r-l)+a[l+2]*(r-l-1)+\cdots+a[r-1]*2+a[r] ...
- (六)mybatis拦截器
首先拦截器可以拦截mybatis四大核心对象:StatementHandler,ParameterHandler,ResultSetHandler,Executor,具体拦截时根据需求拦截一部分方法 ...