传入条形码内容(数字),生成流,最后返回base64格式
public static String generate(String msg) {
ByteArrayOutputStream ous = new ByteArrayOutputStream();
if (StringUtils.isBlank(msg) || ous == null) {
return "";
}
String imageBase64 = "";
Code39Bean bean = new Code39Bean();
// 精细度
final int dpi = 150;
// module宽度
final double moduleWidth = UnitConv.in2mm(1.0f / dpi);
// 配置对象
bean.setModuleWidth(moduleWidth);
bean.setWideFactor(3);
bean.doQuietZone(false);
String format = "image/png";
try {
// 输出到流
BitmapCanvasProvider canvas = new BitmapCanvasProvider(ous, format, dpi,
BufferedImage.TYPE_BYTE_BINARY, false, 0);
// 生成条形码
bean.generateBarcode(canvas, msg);
// 结束绘制
canvas.finish();
BufferedImage image = canvas.getBufferedImage();
ByteArrayOutputStream baos = new ByteArrayOutputStream();//io流
try{
ImageIO.write(image, "png", baos);//写入流中
}catch(IOException e){
e.printStackTrace();
}
byte[] bytes = baos.toByteArray();//转换成字节
BASE64Encoder encoder = new BASE64Encoder();
String png_base64 = encoder.encodeBuffer(bytes).trim();//转换成base64串
png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n
imageBase64 = "data:image/jpg;base64,"+png_base64;
} catch (IOException e) {
throw new RuntimeException(e);
}
return imageBase64;
}
====================================================================
引包
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.apache.commons.lang3.StringUtils;
import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;
import sun.misc.BASE64Encoder;
import javax.imageio.ImageIO;