条形码生成 图片裁剪 上传至七牛云 返回URL链接

背景:最近一个项目的会员模块,需要将会员手机号码转换成条形码展示出来,并保证能够被扫码枪识别。

接着,简要说明下编码思路,或者说步骤:

  1. 引入 aspose.barcode 的Jar依赖
  2. 调用API,合理配置相关属性,生成条形码
  3. 根据需要对第2步的图片进行一轮裁剪
  4. 将图片以二进制流的方式上传至七牛云
  5. 拼接条形码的访问链接URL

  • 引入Jar依赖(maven)
<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>http://artifact.aspose.com/repo/</url>
</repository>

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-barcode</artifactId>
    <version>18.12</version>
</dependency>
  • Java代码实现条形码生成、图片裁剪、上传和返回图片访问URL
/**
     * @return java.awt.image.BufferedImage
     * @throws
     * @description 借助 aspose.barcode API,获取BufferedImage实例(图片裁剪)
     * @params [text]
     */
    private static BufferedImage getBufferedImage(String text) {

        // set code text & encoding type
        BarCodeGenerator generator = new BarCodeGenerator(EncodeTypes.CODE_128, text);

        // format label
        generator.getCodeTextStyle().setLocation(CodeLocation.ABOVE);
        generator.getCodeTextStyle().setColor(new Color(153, 153, 153));
        generator.setForeColor(new Color(111, 108, 111));
        generator.setBackColor(Color.WHITE);

        BufferedImage bufferedImage = generator.generateBarCodeImage();
        bufferedImage.flush();

        return bufferedImage.getSubimage(2, 10, 249, 151); // // the size for CodeLocation.ABOVE
        // return bufferedImage.getSubimage(2, 11, 249, 148);  // the size for CodeLocation.BELOW
    }


 /**
     * @return java.lang.String
     * @throws
     * @description 生成条形码并上传至七牛云
     * @params [text]
     */
    public String generateBarCodeAndUpload(String text) throws IOException {

        // set code text & encoding type
        BufferedImage subImage = getBufferedImage(text);

        ByteArrayOutputStream os = new ByteArrayOutputStream();

        // 生成二维码 => 图片写入字节输出流
        ImageIO.write(subImage, "png", os);

        String domainAndKey = qiniuUploadUtils.uploadFilesViaServer(os);

        logger.info("BarcodeUtils.generateBarCodeAndUpload ========= 域名+Key:{} ========= ", domainAndKey);

        if (StringUtils.isNotBlank(domainAndKey)) {
            String[] dKeyArray = domainAndKey.split(",");
            return "http://" + dKeyArray[0] + "/" + dKeyArray[1];
        } else {
            logger.info("BarcodeUtils.generateBarCodeAndUpload ======== 条形码生成错误,请稍后重试!========");
            throw new CommonBusinessException("条形码生成错误,请稍后重试!");
        }

    }


 /**
     * @return void
     * @throws
     * @description 七牛云通过服务端上传文件(使用数据流传输)
     * @params [os]
     */
    public String uploadFilesViaServer(ByteArrayOutputStream os) {

        String retKey = "";

        // 构造一个带指定Zone对象的配置类
        Configuration cfg = new Configuration(Zone.zone2());

        UploadManager uploadManager = new UploadManager(cfg);

        String uuid = UUID.randomUUID().toString();

        // 等同于文件名
        String key = uuid.replace("-", "") + ".jpg";

        Auth auth = Auth.create(accessKey, secretKey);
        String upToken = auth.uploadToken(bucket);

        // 接收字节输出流,然后转换为字节输入流
        InputStream byteInputStream = new ByteArrayInputStream(os.toByteArray());

        try {
            Response response = uploadManager.put(byteInputStream, key, upToken, null, null);
            //解析上传成功的结果
            DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            System.out.println(putRet.key);
            System.out.println(putRet.hash);

            retKey = putRet.key;
        } catch (QiniuException ex) {
            Response r = ex.response;
            System.err.println(r.toString());
            try {
                System.err.println(r.bodyString());
            } catch (QiniuException ex2) {
                //ignore
            }
        }

        return domain + "," + retKey;
    }

猜你喜欢

转载自blog.csdn.net/wub116/article/details/86535506