美文网首页
ImageIO OutputStream转BASE64字符串

ImageIO OutputStream转BASE64字符串

作者: CNSTT | 来源:发表于2021-05-17 16:48 被阅读0次

部分代码接上文

一、代码

    /**
     * 后端图片裁剪多余空白区域
     *  返回BASE64编码字符串 - 白底黑字(测试)
     *
     * @param file 上传单个文件
     * @return java.lang.String
     * @author Tansj
     * @since 2021/05/17
     */
    @Override
    public String trimCutImageFile(MultipartFile file) throws Exception {
        BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        int width = bufferedImage.getWidth();
        int height = bufferedImage.getHeight();
        log.info("原图片宽度:==={},原图片高度:==={}", width, height);
        int[] arr = bufferedImageToIntArray(bufferedImage, width, height);
        if (arr != null && arr[2] > 0 && arr[3] > 0) {
            // blank是作为四周边距留白
            int blank = 20;
            BufferedImage newBufferedImage = bufferedImage.getSubimage(arr[0] - blank, arr[1] - blank, arr[2] + blank * 2, arr[3] + blank * 2);
            ImageIO.write(newBufferedImage, "png", outputStream);
            byte[] bytes = outputStream.toByteArray();
            // 转BASE64编码字符串
            BASE64Encoder encoder = new BASE64Encoder();
            String base64String = encoder.encodeBuffer(bytes).trim();
            return base64String.replaceAll("\n", "").replaceAll("\r", "");
        }
        return "";
    }

二、ImageIO两种输出

// 两种方式
ImageIO.write(newBufferedImage, "png", outputStream) // 流
ImageIO.write(newBufferedImage, "png", new File("E:/log/test1.png")) // 文件

三、文件流转BASE64字符串

byte[] bytes = outputStream.toByteArray();
// 转BASE64编码字符串
BASE64Encoder encoder = new BASE64Encoder();
String base64String = encoder.encodeBuffer(bytes).trim();
return base64String.replaceAll("\n", "").replaceAll("\r", "");

前端显示需要追加“data:image/png;base64,” + base64String

相关文章

网友评论

      本文标题:ImageIO OutputStream转BASE64字符串

      本文链接:https://www.haomeiwen.com/subject/oobjjltx.html