java 几种生成海报的方式

本文详细介绍了一种使用Java生成海报的方法,包括生成base64格式图片、处理流的方式以及通用方法,适用于不同应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生成方式的util已经在另一篇文章里说过啦,这篇文章要参考这以下的链接才能看得懂

java生成海报并保存-包括微信小程序带场景值的二维码

1、第一种是生成base64的格式这种也是比较常见的

   @ApiOperation(value = "海报生成,返回的是base64图片")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "publishId", value = "分享海报发布id", paramType = "query", dataType = "Long")
    })
    @GetMapping(value = "/index")
    public Result<Object> posterUtils(
            @RequestParam Long publishId
    ) throws Exception {
        PublishDO publishDO = findPetService.findPublishById(publishId);
        //作为场景值
        Long userId;
        if (publishDO.getUserId() == 0) {
            userId = Long.parseLong(publishDO.getExtObj().getString("oid"));
        } else {
            UserDO userDO = userServices.findUserById(publishDO.getUserId());
            userId = userDO.getId();
        }
        Set<String> t = publishDO.getImages();
        Iterator<String> it = t.iterator();
        String str = "";
        while (it.hasNext()) {
            str = it.next();
        }
        BufferedImage bufferedImage=PosterUtils.createPoster(userServices.getAccessToken(), publishDO.getTitle(), userId, publishDO.getRewardAmount().toString(), str);
                ByteArrayOutputStream os = new ByteArrayOutputStream();
        ImageIO.write(bufferedImage, "jpg", os);
        String encodeStr = Base64.getEncoder().encodeToString(os.toByteArray());
        os.close();
        return new ResultUtil<>().setData(encodeStr);
    }

2、生成流方式,这分为读取流和下载流 ,先说读取流 这个有点问题,当时使用的是小程序,在ios端是没问题但是在安卓端出现了不能下载的问题,但是还是把代码贴出来

  @ApiOperation(value = "海报生成,返回的是图片文件")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "publishId", value = "分享海报发布id", paramType = "query", dataType = "Long")
    })
    @GetMapping(value = "/mp")
    public void posterUtils(
            @RequestParam Long publishId,
            ServletResponse response
    ) throws Exception {
        PublishDO publishDO = findPetService.findPublishById(publishId);
        //作为场景值
        Long userId;
        if (publishDO.getUserId() == 0) {
            userId = Long.parseLong(publishDO.getExtObj().getString("oid"));
        } else {
            UserDO userDO = userServices.findUserById(publishDO.getUserId());
            userId = userDO.getId();
        }
        Set<String> t = publishDO.getImages();
        Iterator<String> it = t.iterator();
        String str = "";
        while (it.hasNext()) {
            str = it.next();
        }

        BufferedImage bufferedImage=PosterUtils.createPoster(userServices.getAccessToken(), publishDO.getTitle(), userId, publishDO.getRewardAmount().toString(), str);
        ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
    }

3、接下来是通用方法

 @GetMapping(value = "/postImg/{publishId}/{fileName}")
    public void postImg(
            @PathVariable("publishId") Long publishId,
            @PathVariable("fileName") String fileName,
            ServletResponse response
    ) throws Exception {
        PublishDO publishDO = findPetService.findPublishById(publishId);
        //作为场景值
        Long userId;
        if (publishDO.getUserId() == 0) {
            userId = Long.parseLong(publishDO.getExtObj().getString("oid"));
        } else {
            UserDO userDO = userServices.findUserById(publishDO.getUserId());
            userId = userDO.getId();
        }
        Set<String> t = publishDO.getImages();
        Iterator<String> it = t.iterator();
        String str = "";
        while (it.hasNext()) {
            str = it.next();
        }

        BufferedImage bufferedImage=PosterUtils.createPoster(userServices.getAccessToken(), publishDO.getTitle(), userId, publishDO.getRewardAmount().toString(), str);
        ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
    }

这种使用参数然后把生成的流拼接成像图片一样的格式就ok啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值