二维码图片处理换logo,加文字
二维码图片处理
将微信小程序的二维码图片中间加logo 和给图片加文字
获取二维码图片上一篇文章有讲到怎么获取
相关的pom
<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.0.0</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.0.0</version></dependency>
首先获取logo图片,我是发送远程请求获取的图片
// 首先获取log图片HttpResponse httpResponse = HttpUtils.doGet(url);InputStream content = httpResponse.getEntity().getContent();//这里将logo转换成BufferImage 画布处理需要BufferedImage logoImage = ImageIO.read(content);//将logo压缩成指定大小//绘制图像:返回一个新的按照with,height缩放呈现的Image//这里的两百是你想将logo图片变化的大小Image scaledInstance = logoImage .getScaledInstance(200, 200, Image.SCALE_SMOOTH);// 构造一个新的BufferedImage 宽高200*200logoImage = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB);logoImage .getGraphics().drawImage(scaledInstance, 0, 0, null);return logoImage ;//这里返回的是BufferImage
将正方形图片去掉角边
/*** 图片切圆角*@paramsrc Image 方形logo图片*@paramr adius radius 如果想为圆形 redius需等于log长度*@return*/public static BufferedImage setClip(BufferedImage srcImage, int radius){int width =srcImage.getWidth();int height =srcImage.getHeight();//新生成指定大小画布BufferedImage image= new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);Graphics2D gs=image.createGraphics();gs.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);gs.setClip(new RoundRectangle2D.Double(0, 0, width, height, radius, radius));gs.drawImage(srcImage,0, 0, null);//将logo从新生成的画布原点开始画图gs.dispose();//处理绘图return image;}
给二维码增加文字替换logo
//生成新的二维码 image 二维码public BufferedImage createNewPic(String uGuid, BufferedImage image) throws IOException {//获取二维码的宽高int width = image.getWidth();int height = image.getHeight();//生成新的画布 这里是生成一个新的画布,放文字相对更美观 ,如果不需要也可以根据二维码生成新的画布,不过如果字体过大可能是会挡住部分二维码的//画布的宽和二维码一样int picWid=width;int picHeight=height + 34;//因为字体我设置的16 所以高度相对增加一些BufferedImage BufImage = new BufferedImage(picWid, picHeight, BufferedImage.TYPE_INT_RGB);// RGB形式Graphics2D g = BufImage.createGraphics();g.drawRect(0,0,picWid,picHeight);//画线框g.setColor(Color.black);//将画布填充颜色g.fillRect(0,0,picWid,picHeight);//是用预定的颜色填充一个矩形g.drawImage(image, 0, 0, null);// //基于二维码打开画布
// Graphics2D rng = image.createGraphics();
// rng.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP));//获取设备名称编号 这里我是获取自己的文字信息EMEquipmentEntity one = equipmentApi.getOneWithMapString("uGuid@EQ:" + uGuid);String equipmentName = one.getEquipmentName();String equipmentCode = one.getEquipmentCode();String uClientId = SysContext.getClientId();if (SysContext.getClientId() == null) uClientId = one.getuClientId();String code = "设备名称:"+ equipmentName + " 设备编码:" + equipmentCode;//这里是获取我存放图片的路径EnterpriseLogEntity enterpriseLogEntity = enterpriseLogApi.getOneWithMapString("bUsable@EQ:true,uClientId@EQ:" + uClientId);if (enterpriseLogEntity != null) {String url = path + enterpriseLogEntity.getsLocalPath();// 首先获取log图片HttpResponse httpResponse = HttpUtils.doGet(url);InputStream content = httpResponse.getEntity().getContent();BufferedImage logoImage = ImageIO.read(content);//计算中间图片的比例 根据二维码中图片的比例 如果二维码大小不一定放出来// BufferedImage tag = handleImage(logoImage,f); 参数加个f,计算具体log的长宽int width1 = logoImage.getWidth();int height1 = logoImage.getHeight();float f = (float) width1/(float) 200;// ==================================ByteArrayOutputStream bs = null;ImageOutputStream imOut = null;InputStream byteArrayInputStream = null;try {//处理图片生成新的BufferedImage 这里就是前面写的将logo图片压缩或放大的方法BufferedImage tag = handleImage(logoImage);bs = new ByteArrayOutputStream();imOut = ImageIO.createImageOutputStream(bs);ImageIO.write(tag, "png", imOut);byteArrayInputStream = new ByteArrayInputStream(bs.toByteArray());} catch (IOException e) {throw new IllegalArgumentException("compress image error:", e);} finally {//释放资源close(bs, imOut);}BufferedImage read = ImageIO.read(byteArrayInputStream);//去掉log图片的边角 200是中间替换图片的款度 log.宽度=200 参数radius给200 则为圆 参数200根据log的长宽改变read = setClip(read,200);//log的宽高int logoWidth = read.getWidth();int logoHeight = read.getHeight();//log存在与二维码的位置int x = (width-logoWidth)/2;int y = (height-logoHeight)/2;//定义log所在二维码得位置g.drawImage(read, x, y, null);}//这里windows可以直接这么写,苹果系统需要导入相应的字体库//Font.PLAIN(普通)//Font.BOLD(加粗)//Font.ITALIC(斜体)//Font.BOLD+ Font.ITALIC(粗斜体)Font font = new Font("楷体", Font.BOLD, 16);g.setFont(font);g.setColor(Color.white);// 获取当前文字的对象FontMetrics metrics1 = g.getFontMetrics(font);//判断字体宽度,如果超过二维码大小就换行if (metrics1.stringWidth(code) <= width) {int startX1 = (width - metrics1.stringWidth(code)) / 2;g.drawString(code, startX1, height+17);} else {//这么做的个换行,因为我的不会超过两行如果你们的不止的话可以写个递归就可以解决了,但是不要忘了处理画布的高度String[] split = StrUtil.split(code, code.length() / 2);int startX1 = (width - metrics1.stringWidth(split[0])) / 2;g.drawString(split[0].replace(" ",""), startX1, height+17);g.drawString(split[1].replace(" ",""), startX1, height+34);}// 处理绘图g.dispose();BufImage.flush();return BufImage;//这里就是处理好的二维码图片 //这是bufferImage类型的,要传给前端需要inputStream 上面logo处理那里有方法可以参考 }
二维码图片处理换logo,加文字相关推荐
- 使用zxing生成带logo的二维码图片,自动调节logo图片相对二维码图片的大小
使用zxing生成带logo的二维码图片,自动调节logo图片相对二维码图片的大小 * 可选是否带logo,可选是否保存二维码图片:结果返回base64编码的图片数据字符串 * 页面显示:< ...
- java生成二维码图片(有logo),并在图片下方附文字
logo配置类 /*** Created by Amber Wang on 2017/11/27 17:25.*/import java.awt.*;public class LogoConfig { ...
- JAVA使用barcode4j生成条形码和二维码图片以及带logo的二维码,验证码图片
二维码 1.Maven引入barcode4j依赖 <!-- 条形码生成 --><dependency><groupId>net.sf.barcode4j</g ...
- 刷新页面微信二维码图片随机换,点击按钮自动复制对应微信号
<div style="text-align: center;"> <p style="font-size: 18px;color: rgb(255, ...
- java使用zxing生成二维码,可带logo和底部文字
java使用zxing生成二维码,可带logo和底部文字 springboot中整合zxing生成二维码 一.导入依赖 <properties><zxing.version>3 ...
- 使用Java生成二维码图片(亲测)
下面我来分享两种生成二维码图片的方法. 第一种,填入你扫描二维码要跳转的网址直接生成二维码 第一步:导入相关的包 1 <dependency> 2 <groupId>com.g ...
- Zxing和QR CODE 生成与解析二维码实例(带logo篇)
上一篇介绍了普通的二位码的生成与解析,本篇来介绍两种工具类生成带Logo的二维码的实例 下载jar包地址:http://download.csdn.net/detail/gao36951/816186 ...
- 使用Java生成二维码图片
下面我来分享两种生成二维码图片的方法. 第一种,填入你扫描二维码要跳转的网址直接生成二维码 第一步:导入相关的包 1 <dependency> 2 <groupId>com.g ...
- (二维码处理--2)二维码图片和海报背景进行合成(包含生成二维码)
maven依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>core</ ...
- Java实现生成二维码(内嵌LOGO和无LOGO均可)扫描进入目标网址
效果图: <<<<<< = = = = = = >>>>>> 1.导入maven依赖 <dependency>< ...
最新文章
- [ios]NSLock锁
- ubuntu as86
- 9.JAVA之GUI编程列出指定目录内容
- quick cocos2d-x 精灵大小(宽高)获取
- java \t怎么从头开始_通过这些简单的步骤从头开始学习Java
- MFC中五个初始类的作用
- 闭包造成的内存泄露怎么解决?
- 如何使用SSH连接到远程MySQL服务器
- SQL Server 数据库之字符串函数
- 液晶显示器测试软件6,屏幕坏点检测工具(Datum pixel repair)
- MVX相关设计模式的理解。
- 共享网络打印机无法连接计算机,电脑中出现共享打印机连接错误问题的解决方法...
- 关于新手学习seo入门的指南建议
- python操作符是什么意思_如何使用python操作符**与*?有什么区别?
- 一文了解线控制动市场格局——7家公司10款产品盘点
- python测验6_测验6: 组合数据类型 (第6周)
- UWB定位实验 - 客户端模式(被动式)TDOA定位精度测试
- 木兰天池全新景观2013闪亮登场
- (附源码)springboot学生宿舍管理系统 毕业设计 161542
- 液晶拼接处理器_液晶拼接大屏运用设施
热门文章
- 小米android11账号补丁,小米9 MIUI11 解账户锁 可登小米账号 永不反锁 完美ROOT 解锁包...
- 实验6 振幅解调器(包络检波、同步检波)
- c语言实验报告(八),C语言实验报告(八
- VS2013编译最简单的PPAPI插件
- ToolsOh第7批收录
- 单元测试报告软件测试,软件单元测试报告-模板
- 修改文件 火车票买下铺_12306修改代码买下铺?12306码农太弱了吧 (转载)
- 声音鉴卡引流神器网站源码
- sftp非交互式每日定时拉取增量数据文件至本地合并至存量
- android蓝牙软件,Android手机蓝牙助手(Bluetooth File Transfer)