Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
fzm-joying
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
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
lei
fzm-joying
Commits
4b7910d8
Commit
4b7910d8
authored
Mar 22, 2022
by
33
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
QRCodeUtil工具类优化
parent
292f86a2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
33 additions
and
128 deletions
+33
-128
QRCodeUtil.java
...common/src/main/java/com/fzm/common/utils/QRCodeUtil.java
+32
-127
NftController.java
...rc/main/java/com/fzm/portal/controller/NftController.java
+1
-1
No files found.
joying-common/src/main/java/com/fzm/common/utils/QRCodeUtil.java
View file @
4b7910d8
package
com
.
fzm
.
common
.
utils
;
package
com
.
fzm
.
common
.
utils
;
import
com.fzm.common.model.BufferedImageLuminanceSource
;
import
com.google.zxing.BarcodeFormat
;
import
com.google.zxing.*
;
import
com.google.zxing.EncodeHintType
;
import
com.google.zxing.MultiFormatWriter
;
import
com.google.zxing.common.BitMatrix
;
import
com.google.zxing.common.BitMatrix
;
import
com.google.zxing.common.HybridBinarizer
;
import
com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
;
import
com.google.zxing.qrcode.decoder.ErrorCorrectionLevel
;
import
javax.imageio.ImageIO
;
import
javax.imageio.ImageIO
;
import
java.awt.*
;
import
java.awt.geom.RoundRectangle2D
;
import
java.awt.image.BufferedImage
;
import
java.awt.image.BufferedImage
;
import
java.io.ByteArrayOutputStream
;
import
java.io.ByteArrayOutputStream
;
import
java.io.File
;
import
java.nio.charset.StandardCharsets
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.util.Base64
;
import
java.util.Base64
;
import
java.util.Hashtable
;
import
java.util.HashMap
;
import
java.util.Map
;
public
class
QRCodeUtil
{
public
class
QRCodeUtil
{
private
static
final
String
CHARSET
=
"utf-8"
;
private
static
final
String
FORMAT_NAME
=
"JPG"
;
// 二维码尺寸
private
static
final
int
QRCODE_SIZE
=
300
;
private
static
final
int
QRCODE_SIZE
=
300
;
// LOGO宽度
private
static
final
int
WIDTH
=
60
;
// LOGO高度
private
static
final
int
HEIGHT
=
60
;
private
static
BufferedImage
createImage
(
String
content
,
String
imgPath
,
boolean
needCompress
)
throws
Exception
{
private
static
final
Map
<
EncodeHintType
,
Object
>
hints
=
new
HashMap
<>();
Hashtable
hints
=
new
Hashtable
();
hints
.
put
(
EncodeHintType
.
ERROR_CORRECTION
,
ErrorCorrectionLevel
.
H
);
hints
.
put
(
EncodeHintType
.
CHARACTER_SET
,
CHARSET
);
hints
.
put
(
EncodeHintType
.
MARGIN
,
1
);
BitMatrix
bitMatrix
=
new
MultiFormatWriter
().
encode
(
content
,
BarcodeFormat
.
QR_CODE
,
QRCODE_SIZE
,
QRCODE_SIZE
,
hints
);
int
width
=
bitMatrix
.
getWidth
();
int
height
=
bitMatrix
.
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
,
bitMatrix
.
get
(
x
,
y
)
?
0xFF000000
:
0xFFFFFFFF
);
}
}
if
(
imgPath
==
null
||
""
.
equals
(
imgPath
))
{
return
image
;
}
// 插入图片
QRCodeUtil
.
insertImage
(
image
,
imgPath
,
needCompress
);
return
image
;
}
private
static
void
insertImage
(
BufferedImage
source
,
String
imgPath
,
boolean
needCompress
)
throws
Exception
{
static
{
File
file
=
new
File
(
imgPath
);
hints
.
put
(
EncodeHintType
.
ERROR_CORRECTION
,
ErrorCorrectionLevel
.
M
);
if
(!
file
.
exists
())
{
hints
.
put
(
EncodeHintType
.
CHARACTER_SET
,
StandardCharsets
.
UTF_8
);
System
.
err
.
println
(
""
+
imgPath
+
" 该文件不存在!"
);
hints
.
put
(
EncodeHintType
.
MARGIN
,
2
);
return
;
}
Image
src
=
ImageIO
.
read
(
new
File
(
imgPath
));
int
width
=
src
.
getWidth
(
null
);
int
height
=
src
.
getHeight
(
null
);
if
(
needCompress
)
{
// 压缩LOGO
if
(
width
>
WIDTH
)
{
width
=
WIDTH
;
}
if
(
height
>
HEIGHT
)
{
height
=
HEIGHT
;
}
Image
image
=
src
.
getScaledInstance
(
width
,
height
,
Image
.
SCALE_SMOOTH
);
BufferedImage
tag
=
new
BufferedImage
(
width
,
height
,
BufferedImage
.
TYPE_INT_RGB
);
Graphics
g
=
tag
.
getGraphics
();
g
.
drawImage
(
image
,
0
,
0
,
null
);
// 绘制缩小后的图
g
.
dispose
();
src
=
image
;
}
// 插入LOGO
Graphics2D
graph
=
source
.
createGraphics
();
int
x
=
(
QRCODE_SIZE
-
width
)
/
2
;
int
y
=
(
QRCODE_SIZE
-
height
)
/
2
;
graph
.
drawImage
(
src
,
x
,
y
,
width
,
height
,
null
);
Shape
shape
=
new
RoundRectangle2D
.
Float
(
x
,
y
,
width
,
width
,
6
,
6
);
graph
.
setStroke
(
new
BasicStroke
(
3
f
));
graph
.
draw
(
shape
);
graph
.
dispose
();
}
}
/**
/**
* @param content 二维码内容
* @param content 二维码内容
* @param imgPath 嵌入二维码的图片路径
* @param needCompress 是否压缩
* @return
* @return
* @throws Exception
*/
*/
public
static
String
encode
(
String
content
,
String
imgPath
,
boolean
needCompress
)
throws
Exception
{
public
static
String
encode
(
String
content
)
{
BufferedImage
image
=
QRCodeUtil
.
createImage
(
content
,
imgPath
,
needCompress
);
try
(
ByteArrayOutputStream
out
=
new
ByteArrayOutputStream
())
{
ByteArrayOutputStream
baos
=
new
ByteArrayOutputStream
();
//io流
BufferedImage
image
=
QRCodeUtil
.
createImage
(
content
);
try
{
ImageIO
.
write
(
image
,
"png"
,
out
);
ImageIO
.
write
(
image
,
"png"
,
baos
);
//写入流中
byte
[]
bytes
=
out
.
toByteArray
();
}
catch
(
IOException
e
)
{
String
png_base64
=
Base64
.
getEncoder
().
encodeToString
(
bytes
);
e
.
printStackTrace
();
}
return
"data:image/jpg;base64,"
+
png_base64
;
byte
[]
bytes
=
baos
.
toByteArray
();
//转换成字节
}
catch
(
Exception
e
)
{
String
png_base64
=
Base64
.
getEncoder
().
encodeToString
(
bytes
);
//转换成base64串
return
"data:image/jpg;base64,"
+
png_base64
;
}
// 被注释的方法
/*
* public static void encode(String content, String destPath, boolean
* needCompress) throws Exception { QRCodeUtil.encode(content, null, destPath,
* needCompress); }
*/
public
static
void
encode
(
String
content
)
throws
Exception
{
QRCodeUtil
.
encode
(
content
,
null
,
false
);
}
public
static
void
encode
(
String
content
,
String
imgPath
,
OutputStream
output
,
boolean
needCompress
)
throws
Exception
{
BufferedImage
image
=
QRCodeUtil
.
createImage
(
content
,
imgPath
,
needCompress
);
ImageIO
.
write
(
image
,
FORMAT_NAME
,
output
);
}
public
static
void
encode
(
String
content
,
OutputStream
output
)
throws
Exception
{
QRCodeUtil
.
encode
(
content
,
null
,
output
,
false
);
}
public
static
String
decode
(
File
file
)
throws
Exception
{
BufferedImage
image
;
image
=
ImageIO
.
read
(
file
);
if
(
image
==
null
)
{
return
null
;
return
null
;
}
}
BufferedImageLuminanceSource
source
=
new
BufferedImageLuminanceSource
(
image
);
BinaryBitmap
bitmap
=
new
BinaryBitmap
(
new
HybridBinarizer
(
source
));
Result
result
;
Hashtable
hints
=
new
Hashtable
();
hints
.
put
(
DecodeHintType
.
CHARACTER_SET
,
CHARSET
);
result
=
new
MultiFormatReader
().
decode
(
bitmap
,
hints
);
String
resultStr
=
result
.
getText
();
return
resultStr
;
}
}
public
static
String
decode
(
String
path
)
throws
Exception
{
private
static
BufferedImage
createImage
(
String
content
)
throws
Exception
{
return
QRCodeUtil
.
decode
(
new
File
(
path
));
BitMatrix
bitMatrix
=
new
MultiFormatWriter
().
encode
(
content
,
BarcodeFormat
.
QR_CODE
,
QRCODE_SIZE
,
QRCODE_SIZE
,
hints
);
int
width
=
bitMatrix
.
getWidth
();
int
height
=
bitMatrix
.
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
,
bitMatrix
.
get
(
x
,
y
)
?
0xFF000000
:
0xFFFFFFFF
);
}
}
return
image
;
}
}
}
}
\ No newline at end of file
joying-portal/src/main/java/com/fzm/portal/controller/NftController.java
View file @
4b7910d8
...
@@ -104,7 +104,7 @@ public class NftController {
...
@@ -104,7 +104,7 @@ public class NftController {
qrCodeMap
.
put
(
"nickname"
,
user
.
getNickname
());
qrCodeMap
.
put
(
"nickname"
,
user
.
getNickname
());
qrCodeMap
.
put
(
"avatar"
,
user
.
getAvatar
());
qrCodeMap
.
put
(
"avatar"
,
user
.
getAvatar
());
qrCodeMap
.
put
(
"wallet"
,
user
.
getWallet
());
qrCodeMap
.
put
(
"wallet"
,
user
.
getWallet
());
String
qrCode
=
QRCodeUtil
.
encode
(
JsonUtil
.
toJson
(
qrCodeMap
)
,
null
,
false
);
String
qrCode
=
QRCodeUtil
.
encode
(
JsonUtil
.
toJson
(
qrCodeMap
));
HashMap
<
String
,
Object
>
result
=
new
HashMap
<>(
8
);
HashMap
<
String
,
Object
>
result
=
new
HashMap
<>(
8
);
result
.
put
(
"list"
,
list
);
result
.
put
(
"list"
,
list
);
result
.
put
(
"size"
,
list
.
size
());
result
.
put
(
"size"
,
list
.
size
());
...
...
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