上次写过一次Java代码实现自动生成产品标签图片的案例,今天工作中又用到了,再来补充一下。

要求,生成的标签戴上logo标志,也就是加上图片;直接上代码:

 public static void createQrCode2(String fileName, Device device) throws WriterException, IOException{  fileName=StatusDefine.filePath+fileName;//判断路径是否存在,如果不存在就创建一个File filepath = new File(fileName);//判断路径是否存在,如果不存在就创建一个if (!filepath.getParentFile().exists()) {filepath.getParentFile().mkdirs();}int width = 476; // 第三层图片宽int height = 295;// 第三层图片高int width1 = 470; // 第二层图片宽int height1 = 200;// 第二层图片高//获取标签内容信息String deviceNo = device.getDeviceNo();String deviceName=device.getDeviceName();String departName=device.getDepartId();String deviceModel=device.getDeviceModel();String installPlace=device.getInstallPlace();String purchaseTime=null;if(device.getPurchaseTime() !=null){purchaseTime=device.getPurchaseTime().substring(0,10);}String manufacturer=device.getManufacturer();String deviceId=device.getDeviceId();//生成二维码路径地址//String fileName = StatusDefine.fileCodePath+name;//二维码存放路径Hashtable<EncodeHintType, ErrorCorrectionLevel> hintMap = new Hashtable<EncodeHintType, ErrorCorrectionLevel>();  hintMap.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);  // 矫错级别  QRCodeWriter qrCodeWriter = new QRCodeWriter();  //创建比特矩阵(位矩阵)的QR码编码的字符串  deviceId=new String(deviceId.getBytes("UTF-8"),"ISO-8859-1");int qrCodeSize = 90;//二维码图片边框大小BitMatrix byteMatrix = qrCodeWriter.encode(deviceId, BarcodeFormat.QR_CODE, qrCodeSize, qrCodeSize, hintMap);  // 使BufferedImage勾画QRCode  (matrixWidth 是行二维码像素点)int matrixWidth = byteMatrix.getWidth();BufferedImage image = new BufferedImage(matrixWidth-20, matrixWidth-20, BufferedImage.TYPE_INT_RGB);  image.createGraphics();  Graphics2D graphics = (Graphics2D) image.getGraphics();  graphics.setColor(Color.LIGHT_GRAY);  graphics.fillRect(0, 0, matrixWidth, matrixWidth);  // 使用比特矩阵画并保存图像graphics.setColor(Color.BLACK);  for (int i = 0; i < matrixWidth; i++){for (int j = 0; j < matrixWidth; j++){if (byteMatrix.get(i, j)){graphics.fillRect(i-10, j-10,1, 1);  }}}image.flush();// 得到图片缓冲区 第二层图片BufferedImage bi = new BufferedImage(width1, height1, BufferedImage.TYPE_INT_RGB);// INT精确度达到一定,RGB三原色,高度70,宽度150bi.createGraphics();  // 得到它的绘制环境(这张图片的笔)Graphics2D g2 = (Graphics2D) bi.getGraphics();g2.setColor(Color.LIGHT_GRAY ); // 设置背景颜色g2.fillRect(0, 0, width1, height1);// 填充整张图片(其实就是设置背景颜色)g2.setColor(Color.black);// 设置字体颜色g2.setStroke(new BasicStroke(2.0f)); // 边框加粗g2.drawRect(1, 1, width1-2, height1-2); // 画边框就是黑边框g2.setStroke(new BasicStroke(1.0f)); // 边框加粗大小为1.0fg2.drawLine(0, 40, 470, 40); // 从上到下第二个横线(设备编码下面横线)g2.drawLine(0, 80, 470, 80); // 从上到下第三个横线(设备名称下面横线)g2.drawLine(0, 120, 470, 120); // 从上到下第四个横线(使用部门下面横线)g2.drawLine(0, 160, 390, 160); // 从上到下第5个横线(安装位置下面横线)g2.drawLine(0, 200, 390, 200); // 从上到下第6个横线(安装位置下面横线)g2.drawLine(390, 120, 390, 200); // 从左到右第二个竖线// 设置标题的字体,字号,大小Font titleFont = new Font("宋体", Font.BOLD, 22);g2.setFont(titleFont);String markNameStr = deviceNo;g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 抗锯齿// 计算文字长度,计算居中的X点坐标//FontMetrics fm = g2.getFontMetrics(titleFont);//int titleWidth = fm.stringWidth(markNameStr);//int titleWidthX = (width - titleWidth) / 2 - 40;// 感觉不居中,向左移动35个单位// 设备名称g2.setFont(new Font("宋体", Font.BOLD, 22));g2.drawString("设备名称:"+deviceName, 10, 25);//g2.drawString("设备名称:"+deviceName, 10, 138);//设备编码g2.drawString("设备编码:"+markNameStr, 10, 65);// 使用部门//g2.drawString("使用部门:"+departName, 10, 105);// 规格型号g2.drawString("规格型号:"+deviceModel, 10, 105);// 生产商//g2.drawString("生产商:"+manufacturer, 10, 138);// 安装位置g2.drawString("安装位置:"+installPlace, 10, 145);// 购置日期g2.drawString("购置日期:"+purchaseTime, 10, 185);// 将二维码粘贴到新的面板g2.drawImage(image, 395, 125,image.getWidth(), image.getHeight(), null);g2.dispose(); // 释放对象bi.flush();//生成第三层画布BufferedImage bi3 = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// INT精确度达到一定,RGB三原色,高度70,宽度150bi3.createGraphics();  // 得到它的绘制环境(这张图片的笔)Graphics2D g3 = (Graphics2D) bi3.getGraphics();g3.setColor(Color.WHITE ); // 设置背景颜色g3.fillRect(0, 0, width, height);// 填充整张图片(其实就是设置背景颜色)//将logo图粘贴到新画布 这里是springboot获取静态文件地址,也可以用绝对路径获取图片文件地址File f =ResourceUtils.getFile("classpath:static/image/1234.png");Image currentImage = null;try {currentImage = ImageIO.read(f);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}g3.drawImage(currentImage, 0, 0, width, 60,null);//将表格图粘贴到新画布g3.drawImage(bi, 3, 65,bi.getWidth(), bi.getHeight(), null);//将底图粘贴到新画布File f1 =ResourceUtils.getFile("classpath:static/image/12345.png");Image currentImage1 = null;try {currentImage1 = ImageIO.read(f1);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}g3.drawImage(currentImage1, 0, 265, width, 30,null);g3.dispose();ImageIO.write(bi3, "JPEG", new FileOutputStream(fileName));// 保存图片 JPEG表示保存格式}

效果展示:

Java代码实现自动生成产品标签图片(升级版)相关推荐

  1. Java使用FreeMarker自动生成Word文档(带图片和表单)

    Java使用FreeMarker自动生成Word文档(带图片和表单) 1 背景 2 目标效果 3 创建Word模板 3.1 创建模板文档 3.2 转换模板文档 3.3 处理模板文档中的占位符 3.4 ...

  2. JAVA实现基于ZXing的二维码自动生成与图片合成

    JAVA实现基于ZXing的二维码自动生成与图片合成 近日做项目需要生成带有信息的二维码,并嵌入到一张图片中.实现思路采用Zxing生成二维码,java图形库进行图片的嵌入. 生成二维码 ZXing是 ...

  3. 代码全部自动生成,程序员还有什么用?

    前端干着干着,就把自己干没了 ...... what? 刚看到这种言论的时候深深的为后端的我担心了以后会不会哪天后端的代码也自动生成了? 就事论事,我们今天就来分析一下程序员会不会干着干着,就把自己干 ...

  4. 【R语言】可视化:ggplot代码的自动生成

    [R语言]可视化:ggplot代码的自动生成 前言: 准备 1. 设置 Settings 2. 面板和背景 Panel & Backgroud 3. 坐标轴 Axis 4. 标题与标签 Tit ...

  5. java注解的开发_使用Java注解开发自动生成SQL

    使用注解开发的好处就是减少配置文件的使用.在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件.但是,当配置文件过多,实际维护过程中产生的问题就不容易定位,这样就会徒劳的增加工作量. ...

  6. java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法...

    1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...

  7. Java后端接口自动生成神器 -- EasyYapi插件(Yapi接口管理工具在IDEA里的插件)

    Java后端接口自动生成神器 – EasyYapi插件(Yapi接口管理工具在IDEA里的插件) 一.先看效果 1.生成yapi文档的效果 2.生成postman格式数据并导入接口测试类后的效果(如p ...

  8. PHPCMS v9类新华网新闻头条模块自动生成头条图片

    在原1.0基础上进行了升级 主要的升级功能就是增加了自动生成头条功能,用户可以在后台模块配置中自定义头条图片的大小.背景颜色.文字颜色.文体.边距然后自动生成头条图片. 并可以在每次添加时都可以自定义 ...

  9. java代码实现二维码图片的生成和解析

    2015年什么最火,二维码,2016年随处可见的是什么,二维码.二维码的历史我们就不探究了,今天分享的是利用Java代码实现二维码的生成和解析.Java代码生成和解析二维码涉及到的东西比较多,还需要引 ...

最新文章

  1. BZOJ4668: 冷战 [并查集 按秩合并]
  2. 『流畅的Python』第12章:继承的优缺点
  3. 2019大数据课程_根据数据,2019年最佳免费在线课程
  4. LNMP一键安装包 PHP自动升级脚本
  5. luogu_1495【题解】中国剩余定理
  6. 正交试验设计例题及答案_2020年一级建造师《市政工程》模拟试题及答案(5)...
  7. 机器学习基础(十四)—— 统计计数、majority count 与其数学记号
  8. Bootstrap 第一天
  9. 深度神经网络—超参数调试
  10. 实现简单的Java内存缓存
  11. 【转】OpenGL Related Development ToolKits
  12. 雷达多普勒频率计算公式_详细分析:合成孔径雷达成像技术
  13. 网页截图服务器,命令行下的2款网页截图工具推荐
  14. [导入]polygraph3d三维运行时引擎为silverlight 1.0.zip(15.69 KB)
  15. 使用plugman开发cordova 高德地图定位插件
  16. 孵化中国网络安全未来,ISC 2021创新独角兽沙盒大赛开启招募
  17. DANN loss/acc振荡
  18. SAP FI 系列 (030) - 特别总账标记
  19. Exce丨服务器2O19系统己满,《电子表格Exce20.docx
  20. 如何锁定EXCEL表格而保留某些单元格可以编辑

热门文章

  1. 二进制,十进制,十六进制,相互转化
  2. vue 音乐播放器上一首 下一首切换
  3. 小学机器人编程需要学什么
  4. 使用etcher1.5.24制作 macOS 系统启动u盘 方便又快捷
  5. [网络管理]全双工与半双工的区别
  6. 2.试读取鸢尾花数据集iris.npz,绘制sepal_length和sepal_width两个特征之间的散点图,X轴添加“SepalLength”标签,Y轴添加“SepalWidth”标签,散点设置
  7. 用java代码写邮件,已经测试成功!
  8. Excel教程中INDEX和MATCH函数应用
  9. 视频创作者必看,手机如何给视频插入任意背景音乐?
  10. matlab里pascal是什么意思_你知道动漫里“你的发型很危险”这个梗是什么意思么?...