How to create an EAN-13 barcode with a transparent background using Java?

87 views Asked by At

I have attempted to create an EAN-13 barcode using multiple libraries such as barcodelib, barcode4j, zxing, and the barbecue library. I am generating the barcode on top of an image that has colors like green or blue. The libraries I am using create a barcode image with black bars and a white background. When this barcode image is placed on my colored background image, I end up with a green image and a barcode with a white background. I want the barcode to have the same background as the underlying image. Therefore, I want the barcode to be transparent.

Below is my code. I am using 'setOpaque' to set the background to transparent, but it still creates a barcode image with a white background.

public static BoolStr createBarbecueEAN13(String upcCode) throws OutputException, BarcodeException {
    // Generate EAN-13 Barcode
    Barcode barcode = BarcodeFactory.createEAN13(upcCode);

    // Set barcode properties
    barcode.setDrawingText(true);
    barcode.setOpaque(false);

    // Create a BufferedImage to draw the barcode
    BufferedImage image = new BufferedImage(400, 200, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2d = image.createGraphics();

    // Set rendering hints to improve quality
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);

    int xPos = (image.getWidth() - barcode.getWidth()) / 2;
    int yPos = (image.getHeight() - barcode.getHeight()) / 2;
    barcode.draw(g2d, xPos, yPos);
    g2d.dispose();

    // Optionally, you can save the barcode image to a file
    saveBarcodeImage(barcode, tempFile.getPath());
    successPath = new BoolStr(tempFile.getPath(), true);
    return successPath;
}

  private static void saveBarcodeImage(Barcode barcode, String filePath) {
    try {
      BufferedImage image = BarcodeImageHandler.getImage(barcode);      
      BarcodeImageHandler.savePNG(barcode, new File(filePath));
      System.out.println("Barcode image saved to: " + filePath);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
0

There are 0 answers