将一张图片绘制到另一张图片上(谷歌zxing生成的条形码图片上下增加空白)

背景:公司需要使用谷歌的zxing生成条形码,然后用easyPoi导出到excel文件,而生成的条形码图片上下是没有空白的,导出到excel的时候满铺整个excel单元格,上下两条条形码边缘重叠,非常难看。

研究很久zxing的生成条形码设置,无法在生产条形码的时候给图片上下增加白边。导出excel时也无法让单元格上下留空。


原图

方案:生成一张全白图片,将生成的条形码图片重新绘制到新图片上。

    /**
     * @param srcFile    源条形码图片
     * @param targetFile 目标图片文件
     * @param width      生成的图片宽
     * @param height     生成的图片高
     */
public static void generateBlankBarCode(File srcFile, File targetFile, int width, int height) {
        try {
            BufferedImage image = ImageIO.read(srcFile);

            // 创建画布
            BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            // 创建画笔
            Graphics paint = bufferedImage.getGraphics();
 
            // 设置画布的背景色
            paint.fillRect(0, 0, width, height);
            // 设置画笔的颜色
            paint.setColor(Color.BLACK);

            // 计算绘制图片的高,使条形码上下居中
            int targetImageHeight = (height - image.getHeight()) / 2;
            // 开始绘制
            paint.drawImage(image, 0, targetImageHeight, null);
            // 写入到文件
            ImageIO.write(bufferedImage, "png", new FileOutputStream(targetFile));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

最终效果图


最终效果

你可能感兴趣的:(将一张图片绘制到另一张图片上(谷歌zxing生成的条形码图片上下增加空白))