gpt4 book ai didi

java - 条形码人类可读放置平行于条形码

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:15:01 28 4
gpt4 key购买 nike

这是根据传递的 Id 生成条形码的代码,条形码生成得很好:

 @Override  
public byte[] generateBarcodeForId(String Id) throws VisitMastException{

BarcodeUtil util = BarcodeUtil.getInstance();
BarcodeGenerator gen;
ByteArrayOutputStream bao = null;
try {
bao = new ByteArrayOutputStream();

//Create the barcode bean
Code128Bean bean = new Code128Bean();

int dpi = 150;

//Configure the barcode generator
bean.setModuleWidth(UnitConv.in2mm(1.1f / dpi)); //makes the narrow bar, width exactly one pixel
bean.doQuietZone(true);
bean.setBarHeight(4);
//bean.setVerticalQuietZone(3);
bean.setQuietZone(0);
bean.setMsgPosition(HumanReadablePlacement.HRP_TOP);
BitmapCanvasProvider canvas = new BitmapCanvasProvider(
bao, "image/jpeg", dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0);
bean.generateBarcode(canvas, Id);
canvas.finish();
} catch (IOException e) {
throw new VisitMastException(VisitMastException.BAD_REQUEST,
messageSource.getMessage(CodeEnum.BARCODE_GENERATING_ERROR.getValue(), null, Locale.ENGLISH));
}
return bao.toByteArray();
}

Sample produced barcode image

此代码将人类可读值置于条形码之上:

bean.setMsgPosition(HumanReadablePlacement.HRP_TOP);

人类可读的值可以放在底部或顶部或两者都不放。是否可以在条形码旁边或旁边添加人类可读值。

我们还能减少人类可读值的大小吗?

最佳答案

Barcode4J 不支持开箱即用。一种解决方案(除了将此功能添加到 Barcode4J 之外)可能是创建一个双倍大小的新图像并将条形码和文本区域复制到其中。

找到一个展示总体思路的小 PoC 片段。

BitmapCanvasProvider canvas = new BitmapCanvasProvider(dpi, 
BufferedImage.TYPE_BYTE_BINARY, false, 0);
bean.generateBarcode(canvas, Id);
canvas.finish();

BufferedImage image = canvas.getBufferedImage();
BufferedImage temp = new BufferedImage(image.getWidth() * 2,
image.getHeight() / 2 - 1, image.getType());
Graphics2D g = temp.createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_OFF);
g.drawImage(image, 0, -image.getHeight() / 2, null);
g.drawImage(image, image.getWidth(), 0, null);

g.dispose();
bao.reset();
ImageIO.write(temp, "png", bao);

生成的字节存储到文件中

byte[] byteArray = generateBarcodeForId("1111");
BufferedImage image = ImageIO.read(new ByteArrayInputStream(byteArray));
ImageIO.write(image, "jpg", new File("code128.jpg"));

生成的图像code128.jpg

enter image description here

另一种可能性是使用 HumanReadablePlacement.HRP_NONE 生成条形码,然后使用 canvas.deviceText(...) 绘制文本。

关于java - 条形码人类可读放置平行于条形码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37177314/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com