- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章浅谈java如何生成分享海报工具类由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
# 前言 例如:生成分享海报,比如注册扫二维码登录.分享商品海报等!本博文是基于springboot工程得.
代码如下(示例):在自己得通用工具类模块中导入坐标!(这需要根据自己得工程来) 。
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 。
代码如下(示例): @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);
}
|
代码如下(示例): 这是一个接口!需要自己实现该接口!实现接口代码在下面.
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
;
}
|
代码如下(示例): 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;
}
|
代码如下(示例): 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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我目前提供 4 种分辨率的所有图像(@1x、@2x、@3x 和 @4x) 以便图像在任何显示器上都能清晰显示。但现在我遇到了问题,我在网站上也有一个视频,我想提供 4 种分辨率的视频及其预览图像(所谓
在我的 Ruby on Rails 应用程序中,我使用 imdb gem (https://rubygems.org/gems/imdb) 按标题搜索电影并获取海报 url 并将其添加到我的电影模型中
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
过去我发现Visual Studio 2010 Keybinding Posters和 Visual C# 2005 Keyboard Shortcut Reference Poster非常有帮助。
我是一名优秀的程序员,十分优秀!