JAVA 生成一维码、讲多个图片合称为一个大图
来源:互联网 发布:windows 文件共享 编辑:程序博客网 时间:2024/06/05 10:24
近期做的一个项目,其中有一个批量生成一维码,然后将多个一维码放到一个图片输出的功能。自己做了一个小Demo,在这里记录一下。
生成一维码的功能使用的是barcode,一下是代码,代码很简单,就一下帖处理,不在每块做详细描述了:
import com.google.common.collect.Lists;import org.krysalis.barcode4j.HumanReadablePlacement;import org.krysalis.barcode4j.impl.code39.Code39Bean;import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;import org.krysalis.barcode4j.tools.UnitConv;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedImage;import java.io.*;import java.util.List;/** * 在这里编写类的功能描述 * * @author yangbin * @created 2017/6/20 */public class BarCodeTest { static String FILE_PATH = "/tmp/barcode/"; static int clowns = 5; /** * 行间距 */ static int LineSpacing = 20; public static void main(String[] args) { int code = 1234567890; List<String> barCodeFileNames = Lists.newArrayList(); //需要生成的一维码code for(int i=0;i<10;i++) { String barCode = (code + i) + ""; barCodeFileNames.add(generateImg(barCode)); } System.out.println(barCodeFileNames); //讲多个一维码合成到一个图片上 boolean result = mergeImg(barCodeFileNames, FILE_PATH+Thread.currentThread().getName() + System.currentTimeMillis() + ".png"); System.out.println(result); } /** * 合并图片 * @param barCodeFileNames * @param imgName * @return */ public static boolean mergeImg(List<String> barCodeFileNames,String imgName) { int size = barCodeFileNames.size(); File[] barCodeFiles = new File[size]; BufferedImage[] bufferedImages = new BufferedImage[size]; for(int i = 0;i<size;i++) { try { barCodeFiles[i] = new File(barCodeFileNames.get(i)); bufferedImages[i] = ImageIO.read(barCodeFiles[i]); } catch (IOException e) { e.printStackTrace(); return false; } } int singleImgWidth = bufferedImages[0].getWidth(); int singleImgHeight = bufferedImages[0].getHeight(); int rows = size % clowns == 0 ? size / clowns : (size / clowns + 1); int combinImgWidth = singleImgWidth * clowns ; int combinImgHeight = singleImgHeight * rows + LineSpacing * rows; try { //合成图 BufferedImage combinedImg = new BufferedImage(combinImgWidth, combinImgHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = (Graphics2D) combinedImg.getGraphics(); //设置背景色为白色,默认为黑色 g2.setBackground(Color.WHITE); g2.clearRect(0, 0, combinImgWidth, combinImgHeight); for(int i = 0;i<size;i++) { int startX = (i % clowns) * singleImgWidth; int startY = (i / clowns) * (singleImgHeight + LineSpacing); int[] imageRGB = new int[singleImgWidth * singleImgHeight]; imageRGB = bufferedImages[i].getRGB(0, 0, singleImgWidth, singleImgHeight,imageRGB, 0, singleImgWidth); //讲单个图片的RGB值写入合成图中 combinedImg.setRGB(startX, startY, singleImgWidth, singleImgHeight, imageRGB, 0, singleImgWidth); } File outFile = new File(imgName); ImageIO.write(combinedImg, "png", outFile); } catch (IOException e) { e.printStackTrace(); return false; } //清理单个图片 for(int i = 0;i<size;i++) { barCodeFiles[i].delete(); } return true; } /** * 生成二维码 * @param barcode * @return */ public static String generateImg(String barcode) { OutputStream out = null; String fileName = null; try { Code39Bean bean = new Code39Bean(); final int dpi = 150; bean.setModuleWidth(UnitConv.in2mm(1.0f / dpi)); // 宽度 bean.setWideFactor(4); // 高度 bean.setHeight(10); // 条形码左右两边是否留空白,默认为true bean.doQuietZone(true); // 设置条码号字体的大小 bean.setFontSize(3); // 设置条码号显示的位置 bean.setMsgPosition(HumanReadablePlacement.HRP_BOTTOM); // 获取文件的保存位置 fileName = FILE_PATH + barcode + ".png"; File outputFile = new File(fileName); out = new FileOutputStream(outputFile); BitmapCanvasProvider canvas = new BitmapCanvasProvider(out, "image/png", dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0); bean.generateBarcode(canvas, barcode); canvas.finish(); } catch (FileNotFoundException e) { e.printStackTrace(); return null; } catch (IOException e) { e.printStackTrace(); return null; } finally { try { out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); return null; } } return fileName; }}
阅读全文
1 0
- JAVA 生成一维码、讲多个图片合称为一个大图
- 分割一张大图为小图片数组
- 一个生成文字图片的JAVA函数
- 利用PHP为大图片生成缩略图代码实现
- 在运行时将大图分割为小图片数组
- libgdx中Texturepacker打包小图片为大图片
- Java导出Highcharts生成的图表为图片源码
- Java导出Highcharts生成的图表为图片源码
- Java导出Highcharts生成的图表为图片源码
- Java 批量导出PPT为图片,并合并生成PDF
- Java导出Highcharts生成的图表为图片源码
- html2image html转换为图片 生成快照 java
- java处理图片-大图片输出小图片
- 将一张大图设置为一个100*100的缩略图
- GdkPixbuf如何用多个图片创建一个大图片
- 每天一个JavaScript实例-点击图片显示大图
- javascript图片加载---加载大图的一个解决方案
- 算法的时间复杂度和空间复杂度合称为算法的复杂度。
- 收集的Objective-C runtime博客及知识点总结
- 使用RTL-SDR和Matlab Simulink玩转软件无线电(八)
- 19. Remove Nth Node From End of List
- 加速Android Studio的Gradle构建速度
- 基于Django的独立运行脚本开发
- JAVA 生成一维码、讲多个图片合称为一个大图
- Android 7.0 FileUriExposedException 解决
- QDialog窗口调用QMainwindow窗口的问题
- 如何用安卓中异步从网上获取图片内容
- 将Office(如:Word、Excel、PPT 等)文件转html(通过OpenOffice实现)
- 微软的官方升级网站系统--Windows update
- 基于OPENCV3的物体跟踪算法
- C# 形参和实参
- 支付宝无现金又出新花样!不用手机抬杆就开出停车场