package cn.besteam.modules.system.service.impl; import cn.besteam.common.constant.ErrorCode; import cn.besteam.common.exception.BusinessException; import cn.besteam.common.util.StringUtil; import cn.besteam.config.OssConfig; import cn.besteam.modules.system.service.IOssService; import cn.besteam.modules.system.service.IQrCodeService; import cn.besteam.modules.system.util.MyQrCode; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import uk.org.okapibarcode.backend.Code128; import uk.org.okapibarcode.backend.HumanReadableLocation; import uk.org.okapibarcode.backend.QrCode; import uk.org.okapibarcode.backend.Symbol; import uk.org.okapibarcode.output.Java2DRenderer; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; /** * @author chenqilong * @since 2019-04-16 */ @Service @Slf4j public class QrCodeServiceImpl implements IQrCodeService { @Autowired private IOssService ossService; @Value("${sys.qrcode.magnification}") private int magnification; @Autowired private OssConfig ossConfig; @Override public String genBarcode(String content) { try { Code128 barcode = new Code128(); barcode.setFontName("Courier"); barcode.setFontSize(20); barcode.setQuietZoneHorizontal(10); barcode.setQuietZoneVertical(10); barcode.setModuleWidth(2); barcode.setBarHeight(100); barcode.setHumanReadableLocation(HumanReadableLocation.BOTTOM); barcode.setContent(content); int width = barcode.getWidth(); int height = barcode.getHeight(); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); Graphics2D g2d = image.createGraphics(); Java2DRenderer renderer = new Java2DRenderer(g2d, 1, Color.WHITE, Color.BLACK); renderer.render(barcode); File output = new File(FileUtils.getTempDirectoryPath() + File.separator + StringUtil.uuidNotLine() + ".jpeg"); ImageIO.write(image, "jpeg", output); return ossService.uploadImage(getFolder(), FileUtils.readFileToByteArray(output)); } catch (Exception e) { log.error("", e); throw new BusinessException(ErrorCode.ERR_500); } } @Override public String genQrCode(String content) { try { QrCode qrCode = new QrCode(); qrCode.setPreferredVersion(10); qrCode.setContent(content); int magnification = this.magnification > 0 ? this.magnification : 10; int width = qrCode.getWidth() * magnification; int height = qrCode.getHeight() * magnification; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); Graphics2D g2d = image.createGraphics(); Java2DRenderer renderer = new Java2DRenderer(g2d, magnification, Color.WHITE, Color.BLACK); renderer.render(qrCode); File output = new File(FileUtils.getTempDirectoryPath() + File.separator + StringUtil.uuidNotLine() + ".jpeg"); ImageIO.write(image, "jpeg", output); return ossService.uploadImage(getFolder(), FileUtils.readFileToByteArray(output)); } catch (Exception e) { log.error("", e); } return null; } @Override public File genQrCodeFile(String content) { try { MyQrCode qrCode = new MyQrCode(); qrCode.setPreferredVersion(10); qrCode.setContent(content); int magnification = this.magnification > 0 ? this.magnification : 10; int width = qrCode.getWidth() * magnification; int height = qrCode.getHeight() * magnification; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); Graphics2D g2d = image.createGraphics(); Java2DRenderer renderer = new Java2DRenderer(g2d, magnification, Color.WHITE, Color.BLACK); renderer.render(qrCode); File output = new File(FileUtils.getTempDirectoryPath() + File.separator + StringUtil.uuidNotLine() + ".jpeg"); ImageIO.write(image, "jpeg", output); return output; } catch (Exception e) { log.error("", e); } return null; } private String getFolder() { return ossConfig.getStoreFolder(); } }