Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cloud-platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
youjj
cloud-platform
Commits
63ee4720
Commit
63ee4720
authored
Nov 05, 2020
by
hezhen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
123
parent
3430fd71
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
217 additions
and
0 deletions
+217
-0
pom.xml
ace-common/pom.xml
+8
-0
QrCodeUtil.java
...a/com/github/wxiaoqi/security/common/util/QrCodeUtil.java
+88
-0
ZXingCode.java
...va/com/github/wxiaoqi/security/common/util/ZXingCode.java
+121
-0
No files found.
ace-common/pom.xml
View file @
63ee4720
...
...
@@ -143,6 +143,14 @@
<scope>
compile
</scope>
</dependency>
<!-- 生成二维码 -->
<dependency>
<groupId>
com.google.zxing
</groupId>
<artifactId>
core
</artifactId>
<version>
3.0.1
</version>
</dependency>
<!-- excel 组件 -->
<dependency>
<groupId>
org.apache.poi
</groupId>
...
...
ace-common/src/main/java/com/github/wxiaoqi/security/common/util/QrCodeUtil.java
0 → 100644
View file @
63ee4720
package
com
.
github
.
wxiaoqi
.
security
.
common
.
util
;
import
com.google.zxing.BarcodeFormat
;
import
com.google.zxing.EncodeHintType
;
import
com.google.zxing.MultiFormatWriter
;
import
com.google.zxing.common.BitMatrix
;
import
javax.imageio.ImageIO
;
import
javax.swing.filechooser.FileSystemView
;
import
java.awt.image.BufferedImage
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.text.SimpleDateFormat
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
public
class
QrCodeUtil
{
public
static
void
main
(
String
[]
args
)
{
String
url
=
"https://xxtest.upyuns.com/h5/appHtml/view/Settlement.html"
;
//path 二维码存放路径
String
path
=
FileSystemView
.
getFileSystemView
().
getHomeDirectory
()
+
File
.
separator
+
"testQrcode"
;
//fileName 二维码图片名称
String
fileName
=
new
SimpleDateFormat
(
"yyyyMMddHHmmss"
).
format
(
new
Date
())
+
".jpg"
;
createQrCode
(
url
,
path
,
fileName
);
}
public
static
String
createQrCode
(
String
url
,
String
path
,
String
fileName
)
{
try
{
Map
<
EncodeHintType
,
String
>
hints
=
new
HashMap
<>();
hints
.
put
(
EncodeHintType
.
CHARACTER_SET
,
"UTF-8"
);
BitMatrix
bitMatrix
=
new
MultiFormatWriter
().
encode
(
url
,
BarcodeFormat
.
QR_CODE
,
400
,
400
,
hints
);
File
file
=
new
File
(
path
,
fileName
);
if
(
file
.
exists
()
||
((
file
.
getParentFile
().
exists
()
||
file
.
getParentFile
().
mkdirs
())
&&
file
.
createNewFile
()))
{
writeToFile
(
bitMatrix
,
"jpg"
,
file
);
System
.
out
.
println
(
"搞定:"
+
file
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
static
void
writeToFile
(
BitMatrix
matrix
,
String
format
,
File
file
)
throws
IOException
{
BufferedImage
image
=
toBufferedImage
(
matrix
);
if
(!
ImageIO
.
write
(
image
,
format
,
file
))
{
throw
new
IOException
(
"Could not write an image of format "
+
format
+
" to "
+
file
);
}
}
static
void
writeToStream
(
BitMatrix
matrix
,
String
format
,
OutputStream
stream
)
throws
IOException
{
BufferedImage
image
=
toBufferedImage
(
matrix
);
if
(!
ImageIO
.
write
(
image
,
format
,
stream
))
{
throw
new
IOException
(
"Could not write an image of format "
+
format
);
}
}
private
static
final
int
BLACK
=
0xFF000000
;
private
static
final
int
WHITE
=
0xFFFFFFFF
;
private
static
BufferedImage
toBufferedImage
(
BitMatrix
matrix
)
{
int
width
=
matrix
.
getWidth
();
int
height
=
matrix
.
getHeight
();
BufferedImage
image
=
new
BufferedImage
(
width
,
height
,
BufferedImage
.
TYPE_INT_RGB
);
for
(
int
x
=
0
;
x
<
width
;
x
++)
{
for
(
int
y
=
0
;
y
<
height
;
y
++)
{
image
.
setRGB
(
x
,
y
,
matrix
.
get
(
x
,
y
)
?
BLACK
:
WHITE
);
}
}
return
image
;
}
}
ace-common/src/main/java/com/github/wxiaoqi/security/common/util/ZXingCode.java
0 → 100644
View file @
63ee4720
package
com
.
github
.
wxiaoqi
.
security
.
common
.
util
;
import
com.google.zxing.BarcodeFormat
;
import
com.google.zxing.EncodeHintType
;
import
com.google.zxing.MultiFormatWriter
;
import
com.google.zxing.WriterException
;
import
com.google.zxing.common.BitMatrix
;
import
com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
;
import
org.apache.commons.lang3.StringUtils
;
import
javax.imageio.ImageIO
;
import
java.awt.*
;
import
java.awt.image.BufferedImage
;
import
java.io.File
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Objects
;
public
class
ZXingCode
{
private
static
final
int
QRCOLOR
=
0xFF000000
;
// 默认是黑色
private
static
final
int
BGWHITE
=
0xFFFFFFFF
;
// 背景颜色
private
static
final
int
WIDTH
=
400
;
// 二维码宽
private
static
final
int
HEIGHT
=
400
;
// 二维码高
// 用于设置QR二维码参数
private
static
Map
<
EncodeHintType
,
Object
>
hints
=
new
HashMap
<
EncodeHintType
,
Object
>()
{
private
static
final
long
serialVersionUID
=
1L
;
{
put
(
EncodeHintType
.
ERROR_CORRECTION
,
ErrorCorrectionLevel
.
H
);
// 设置QR二维码的纠错级别(H为最高级别)具体级别信息
put
(
EncodeHintType
.
CHARACTER_SET
,
"utf-8"
);
// 设置编码方式
put
(
EncodeHintType
.
MARGIN
,
0
);
}
};
public
static
void
main
(
String
[]
args
)
throws
WriterException
{
File
logoFile
=
new
File
(
"D:\\hezhen\\upload\\qrcode/logo3.png"
);
File
QrCodeFile
=
new
File
(
"D:\\hezhen\\upload/qrcode/05.png"
);
String
url
=
"https://www.baidu.com/"
;
String
note
=
"访问百度连接"
;
drawLogoQRCode
(
logoFile
,
QrCodeFile
,
url
,
note
);
}
// 生成带logo的二维码图片
public
static
void
drawLogoQRCode
(
File
logoFile
,
File
codeFile
,
String
qrUrl
,
String
note
)
{
try
{
MultiFormatWriter
multiFormatWriter
=
new
MultiFormatWriter
();
// 参数顺序分别为:编码内容,编码类型,生成图片宽度,生成图片高度,设置参数
BitMatrix
bm
=
multiFormatWriter
.
encode
(
qrUrl
,
BarcodeFormat
.
QR_CODE
,
WIDTH
,
HEIGHT
,
hints
);
BufferedImage
image
=
new
BufferedImage
(
WIDTH
,
HEIGHT
,
BufferedImage
.
TYPE_INT_RGB
);
// 开始利用二维码数据创建Bitmap图片,分别设为黑(0xFFFFFFFF)白(0xFF000000)两色
for
(
int
x
=
0
;
x
<
WIDTH
;
x
++)
{
for
(
int
y
=
0
;
y
<
HEIGHT
;
y
++)
{
image
.
setRGB
(
x
,
y
,
bm
.
get
(
x
,
y
)
?
QRCOLOR
:
BGWHITE
);
}
}
int
width
=
image
.
getWidth
();
int
height
=
image
.
getHeight
();
if
(
Objects
.
nonNull
(
logoFile
)
&&
logoFile
.
exists
())
{
// 构建绘图对象
Graphics2D
g
=
image
.
createGraphics
();
// 读取Logo图片
BufferedImage
logo
=
ImageIO
.
read
(
logoFile
);
// 开始绘制logo图片
g
.
drawImage
(
logo
,
width
*
2
/
5
,
height
*
2
/
5
,
width
*
2
/
10
,
height
*
2
/
10
,
null
);
g
.
dispose
();
logo
.
flush
();
}
// 自定义文本描述
if
(
StringUtils
.
isNotEmpty
(
note
))
{
// 新的图片,把带logo的二维码下面加上文字
BufferedImage
outImage
=
new
BufferedImage
(
400
,
445
,
BufferedImage
.
TYPE_4BYTE_ABGR
);
Graphics2D
outg
=
outImage
.
createGraphics
();
// 画二维码到新的面板
outg
.
drawImage
(
image
,
0
,
0
,
image
.
getWidth
(),
image
.
getHeight
(),
null
);
// 画文字到新的面板
outg
.
setColor
(
Color
.
BLACK
);
outg
.
setFont
(
new
Font
(
"楷体"
,
Font
.
BOLD
,
30
));
// 字体、字型、字号
int
strWidth
=
outg
.
getFontMetrics
().
stringWidth
(
note
);
if
(
strWidth
>
399
)
{
// //长度过长就截取前面部分
// 长度过长就换行
String
note1
=
note
.
substring
(
0
,
note
.
length
()
/
2
);
String
note2
=
note
.
substring
(
note
.
length
()
/
2
,
note
.
length
());
int
strWidth1
=
outg
.
getFontMetrics
().
stringWidth
(
note1
);
int
strWidth2
=
outg
.
getFontMetrics
().
stringWidth
(
note2
);
outg
.
drawString
(
note1
,
200
-
strWidth1
/
2
,
height
+
(
outImage
.
getHeight
()
-
height
)
/
2
+
12
);
BufferedImage
outImage2
=
new
BufferedImage
(
400
,
485
,
BufferedImage
.
TYPE_4BYTE_ABGR
);
Graphics2D
outg2
=
outImage2
.
createGraphics
();
outg2
.
drawImage
(
outImage
,
0
,
0
,
outImage
.
getWidth
(),
outImage
.
getHeight
(),
null
);
outg2
.
setColor
(
Color
.
BLACK
);
outg2
.
setFont
(
new
Font
(
"宋体"
,
Font
.
BOLD
,
30
));
// 字体、字型、字号
outg2
.
drawString
(
note2
,
200
-
strWidth2
/
2
,
outImage
.
getHeight
()
+
(
outImage2
.
getHeight
()
-
outImage
.
getHeight
())
/
2
+
5
);
outg2
.
dispose
();
outImage2
.
flush
();
outImage
=
outImage2
;
}
else
{
outg
.
drawString
(
note
,
200
-
strWidth
/
2
,
height
+
(
outImage
.
getHeight
()
-
height
)
/
2
+
12
);
// 画文字
}
outg
.
dispose
();
outImage
.
flush
();
image
=
outImage
;
}
image
.
flush
();
ImageIO
.
write
(
image
,
"png"
,
codeFile
);
// TODO
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment