gpt4 book ai didi

浅谈java如何生成分享海报工具类

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 34 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章浅谈java如何生成分享海报工具类由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

# 前言 例如:生成分享海报,比如注册扫二维码登录.分享商品海报等!本博文是基于springboot工程得.


1、使用步骤

1.导入pom依赖和上传图片到工程

代码如下(示例):在自己得通用工具类模块中导入坐标!(这需要根据自己得工程来) 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!--谷歌图片压缩-->
        <dependency>
            <groupid>net.coobird</groupid>
            <artifactid>thumbnailator</artifactid>
        </dependency>
        <!--谷歌图片压缩-->
        <dependency>
            <groupid>com.google.guava</groupid>
            <artifactid>guava</artifactid>
        </dependency>
        <!--生成二维码-->
        <dependency>
            <groupid>cn.hutool</groupid>
            <artifactid>hutool-extra</artifactid>
            <version> 5.4 . 3 </version>
        </dependency>
        <dependency>
            <groupid>com.google.zxing</groupid>
            <artifactid>core</artifactid>
            <version> 3.3 . 3 </version>
        </dependency>
        <!--生成二维码-->

代码如下(示例): 这里是要生成海报的模板和二维码的logo 。

浅谈java如何生成分享海报工具类

2.创建生成接口

代码如下(示例): @loginuser:是自定义注解获取jwt的用户id(根据自己的需求和工程来) @nologin:是项目种的白名单,不需要携带token的注解 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
    * 生成用户的邀请二维码
    *
    * @param userid 用户id
    */
   @getmapping ( "qrcode" )
   @nologin
   public object qrcode( @loginuser integer userid) {
       //判断用户id是否为空
       if (userid == null ) {
           return responseutil.fail( "请选择用户" );
       }
       //获取生成海报的图片路径
       string filepath = wxuserservice.qrcode(userid);
       return responseutil.ok(filepath);
   }

3.创建service层

代码如下(示例): 这是一个接口!需要自己实现该接口!实现接口代码在下面.

?
1
2
3
4
5
6
7
/**
   * 根据用户的邀请码生成分享海报
   *
   * @param userid
   * @return
   */
  string qrcode(integer userid);

代码如下(示例): 上面接口的实现类 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/**
    * 根据用户的邀请码生成分享海报
    *
    * @param userid
    * @return
    */
   @override
   public string qrcode(integer userid) {
       try {
           // 根据用户id查询验证码
           userinfo userinfo = userservice.selectbyid(userid);
           //判断是否库是否存在海报地址
           if (!stringutils.isempty(userinfo.getposter())) {
               return userinfo.getposter();
           }
           //要生成海报的模板(一般在springboot工程的 resources下 我的工程路径:templates/poster/xjcq.png  可以改成自己工程需要的路径)
           file hbpath = resourceutils.getfile( "classpath:templates/poster/xjcq.png" );
           //要生成二维码的logo(一般在springboot工程的 resources下 我的工程路径:templates/poster/xjcqlogo.png 可以改成自己工程需要的路径)
           file logopath = resourceutils.getfile( "classpath:templates/poster/xjcqlogo.png" );
           // 获取上传后的路径
           string filepath = imageutil.drawstring(qrcodeinvitescheme + userinfo.getinvitecode(), userinfo.getinvitecode(), userinfo.getinvitecode(), hbpath, logopath);
           //file转multipartfile(因为我们的oss是转multipartfile)
           file file = new file(filepath);
           inputstream inputstream = new fileinputstream(file);
           multipartfile multipartfile = new mockmultipartfile(file.getname(), file.getname(),
                   contenttype.application_octet_stream.tostring(), inputstream);
           //上转至阿里云
           string s = storageutil.uploadossfile(multipartfile);
           //更改数据库
           userinfo updateuserinfo = new userinfo();
           updateuserinfo.setid(userinfo.getid());
           updateuserinfo.setposter(s);
           userservice.updatebyid(updateuserinfo);
           return updateuserinfo.getposter();
       } catch (filenotfoundexception e) {
           log.error( "文件找不到:{}" , e);
       } catch (ioexception e) {
           log.error( "io异常:{}" , e);
       }
       return null ;
   }

4.生成海报的工具类

代码如下(示例): wordpath类的代码,可以参考一下java获取yml配置文件内容 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.legend.core.config;
 
 
import lombok.data;
import org.springframework.beans.factory.annotation.value;
import org.springframework.stereotype.component;
 
/**
  * 获取全局配置path
  * @author admin
  */
@component
@data
public class wordpath {
      //生成电子合同的路径
      @value ( "${word.path}" )
      private string wordpath;
      //生成海报的路径
      @value ( "${poster.path}" )
      private string posterpath;
}

浅谈java如何生成分享海报工具类

代码如下(示例): wordpath: 这个是我把要生成画报地址的路径配置到了yml中了,因为测试的使用用的是winodows,上了生产就用linux服务器了。所以配置到了yml中了 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package com.legend.core.util;
 
import cn.hutool.extra.qrcode.qrcodeutil;
import cn.hutool.extra.qrcode.qrconfig;
import com.google.zxing.qrcode.decoder.errorcorrectionlevel;
import com.legend.core.config.wordpath;
import lombok.extern.slf4j.slf4j;
import org.apache.commons.io.ioutils;
import org.springframework.core.io.defaultresourceloader;
import org.springframework.core.io.resourceloader;
import org.springframework.stereotype.service;
 
import javax.annotation.resource;
import javax.imageio.imageio;
import javax.imageio.stream.imageoutputstream;
import java.awt.*;
import java.awt.image.bufferedimage;
import java.io.*;
 
/**
  * 生成分享好友
  *
  * @author 生成分享好友
  */
@service
@slf4j
public class imageutil {
     //我把生成海报地址的路径配置到了springboot的yml配置文件中了
     @resource
     private wordpath wordpath;
 
     /**
      * 生成海报
      *
      * @param content  二维码内容
      * @param written  文字内容
      * @param filepath 保存文件 例:1.png    (d:/1.png)
      * @param hbpath   海报图片地址 例:1.png   (d:/1.png)
      * @param logopath 二维码logo
      * @return
      * @author uncle
      * @description 在一张背景图上添加二维码
      * @date 2020-09-28 23:59
      */
     public string drawstring(string content, string written, string filepath, file hbpath, file logopath) {
         try {
             bufferedimage image = addwater(content, hbpath, logopath);
             graphics2d gd = image.creategraphics();
             // 3、设置对线段的锯齿状边缘处理
             gd.setrenderinghint(renderinghints.key_interpolation, renderinghints.value_interpolation_bilinear);
             // 5、设置水印文字颜色
             gd.setcolor(color.darkgray);
             // 6、设置水印文字font
             gd.setfont( new font( "苹方" , font.plain, 32 ));
             // 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)
             gd.drawstring(written, 440 , 1122 );
             gd.dispose();
 
             bytearrayoutputstream bs = new bytearrayoutputstream();
             imageoutputstream imout = imageio.createimageoutputstream(bs);
             imageio.write(image, "png" , imout);
             inputstream inputstream = new bytearrayinputstream(bs.tobytearray());
 
             // 获取yml海报的配置
             string file = wordpath.getposterpath() + filepath + ".png" ;
             if (! new file(wordpath.getposterpath()).exists()) {
                 new file(wordpath.getposterpath()).mkdirs();
             }
             outputstream outstream = new fileoutputstream(file);
             ioutils.copy(inputstream, outstream);
             inputstream.close();
             outstream.close();
             // 返回文件地址
             return file;
         } catch (exception e) {
             log.error( "海报生成失败:" , e);
         }
         return null ;
     }
 
 
     /***
      * 在一张背景图上添加二维码
      */
     public bufferedimage addwater(string content, file hbpath, file logopath) throws exception {
         // 读取原图片信息
         //得到文件
         //file file = new file(hbpath);
         //文件转化为图片
         image srcimg = imageio.read(hbpath);
         //获取图片的宽
         int srcimgwidth = srcimg.getwidth( null );
         //获取图片的高
         int srcimgheight = srcimg.getheight( null );
         // 加水印
         bufferedimage bufimg = new bufferedimage(srcimgwidth, srcimgheight, bufferedimage.type_int_rgb);
         graphics2d g = bufimg.creategraphics();
         g.drawimage(srcimg, 0 , 0 , srcimgwidth, srcimgheight, null );
         //使用工具类生成二维码
         image image = createqrcode(content, 230 , 230 , logopath);
         //将小图片绘到大图片上,500,300 .表示你的小图片在大图片上的位置。
         g.drawimage(image, 25 , 1070 , null );
         //设置颜色。
         g.setcolor(color.white);
         g.dispose();
         return bufimg;
     }
 
     private bufferedimage createqrcode(string content, int width, int height, file logopath) throws ioexception {
         qrconfig config = new qrconfig(width, height);
         if (logopath != null ) {
             image image = imageio.read( new fileinputstream(logopath));
             config.setimg(image);
         }
         config.seterrorcorrection(errorcorrectionlevel.h);
         return qrcodeutil.generate(
                 content,
                 config);
     }
 
     public inputstream resourceloader(string filefullpath) throws ioexception {
         resourceloader resourceloader = new defaultresourceloader();
         return resourceloader.getresource(filefullpath).getinputstream();
     }
 
}

总结

提示:这里对文章进行总结: 例如:以上就是今天要讲的内容,本文仅仅简单介绍了如何生成分享海报。例如:以上就是今天要讲的内容,本文仅仅简单介绍了如何生成分享海报.

以上就是java 生成分享海报工具类的详细内容,更多关于java 生成分享海报工具类的资料请关注我其它相关文章! 。

原文链接:https://blog.csdn.net/m0_48219908/article/details/115481535 。

最后此篇关于浅谈java如何生成分享海报工具类的文章就讲到这里了,如果你想了解更多关于浅谈java如何生成分享海报工具类的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com