Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
one-certificate-system
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵啸非
one-certificate-system
Commits
6bf0d4a1
Commit
6bf0d4a1
authored
Aug 23, 2024
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加水印图片
parent
7c1abef7
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
142 additions
and
4 deletions
+142
-4
one-certificate-manager/pom.xml
one-certificate-manager/pom.xml
+6
-0
one-certificate-manager/src/main/java/com/mortals/xhx/common/utils/WatermarkImgUtils.java
.../java/com/mortals/xhx/common/utils/WatermarkImgUtils.java
+132
-4
one-certificate-manager/src/main/java/com/mortals/xhx/module/record/web/ApplyLogController.java
...com/mortals/xhx/module/record/web/ApplyLogController.java
+4
-0
No files found.
one-certificate-manager/pom.xml
View file @
6bf0d4a1
...
@@ -159,6 +159,12 @@
...
@@ -159,6 +159,12 @@
<artifactId>
javase
</artifactId>
<artifactId>
javase
</artifactId>
<version>
3.4.1
</version>
<version>
3.4.1
</version>
</dependency>
</dependency>
<dependency>
<groupId>
net.coobird
</groupId>
<artifactId>
thumbnailator
</artifactId>
<version>
0.4.20
</version>
</dependency>
</dependencies>
</dependencies>
<build>
<build>
...
...
one-certificate-manager/src/main/java/com/mortals/xhx/common/utils/WatermarkImgUtils.java
View file @
6bf0d4a1
...
@@ -2,6 +2,9 @@ package com.mortals.xhx.common.utils;
...
@@ -2,6 +2,9 @@ package com.mortals.xhx.common.utils;
import
com.mortals.xhx.module.record.web.ApplyLogController
;
import
com.mortals.xhx.module.record.web.ApplyLogController
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
net.coobird.thumbnailator.Thumbnails
;
import
net.coobird.thumbnailator.filters.Watermark
;
import
net.coobird.thumbnailator.geometry.Positions
;
import
javax.imageio.ImageIO
;
import
javax.imageio.ImageIO
;
import
javax.swing.*
;
import
javax.swing.*
;
...
@@ -9,6 +12,7 @@ import java.awt.*;
...
@@ -9,6 +12,7 @@ import java.awt.*;
import
java.awt.image.BufferedImage
;
import
java.awt.image.BufferedImage
;
import
java.io.File
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.OutputStream
;
import
java.io.OutputStream
;
@Slf4j
@Slf4j
...
@@ -24,6 +28,21 @@ public class WatermarkImgUtils {
...
@@ -24,6 +28,21 @@ public class WatermarkImgUtils {
* @return void
* @return void
*/
*/
public
static
void
addWatermark
(
String
sourceImgPath
,
String
tarImgPath
,
String
waterMarkContent
,
String
fileExt
){
public
static
void
addWatermark
(
String
sourceImgPath
,
String
tarImgPath
,
String
waterMarkContent
,
String
fileExt
){
//todo
try
{
BufferedImage
read
=
ImageIO
.
read
(
new
File
(
sourceImgPath
));
BufferedImage
bi
=
waterMarkByText
(
read
.
getWidth
(),
read
.
getHeight
(),
waterMarkContent
,
Color
.
RED
,
new
Font
(
"宋体"
,
Font
.
BOLD
,
100
),
45.0
,
0.3f
,
sourceImgPath
);
ImageIO
.
write
(
bi
,
fileExt
,
new
File
(
tarImgPath
));
}
catch
(
IOException
e
)
{
log
.
error
(
"添加水印失败"
,
e
);
}
/* return;
Font font = new Font("宋体", Font.BOLD, 100);//水印字体,大小
Font font = new Font("宋体", Font.BOLD, 100);//水印字体,大小
Color markContentColor = Color.red;//水印颜色
Color markContentColor = Color.red;//水印颜色
Integer degree = 45;//设置水印文字的旋转角度
Integer degree = 45;//设置水印文字的旋转角度
...
@@ -59,7 +78,7 @@ public class WatermarkImgUtils {
...
@@ -59,7 +78,7 @@ public class WatermarkImgUtils {
g.drawString(waterMarkContent, width-150 , - 280);
g.drawString(waterMarkContent, width-150 , - 280);
/* for(int j=0;j<rowsNumber;j++){
*/
/* for(int j=0;j<rowsNumber;j++){
boolean bool=false;
boolean bool=false;
for(int i=0;i<columnsNumber;i++){
for(int i=0;i<columnsNumber;i++){
g.drawString(waterMarkContent, i*width + j*width, -i*width + j*width);//画出水印,并设置水印位置
g.drawString(waterMarkContent, i*width + j*width, -i*width + j*width);//画出水印,并设置水印位置
...
@@ -67,7 +86,7 @@ public class WatermarkImgUtils {
...
@@ -67,7 +86,7 @@ public class WatermarkImgUtils {
break;
break;
}
}
if (bool) break;
if (bool) break;
}*/
}*/
/*
g.dispose();// 释放资源
g.dispose();// 释放资源
// 输出图片
// 输出图片
log.info("生成水印图片路径:{}",tarImgPath);
log.info("生成水印图片路径:{}",tarImgPath);
...
@@ -85,13 +104,122 @@ public class WatermarkImgUtils {
...
@@ -85,13 +104,122 @@ public class WatermarkImgUtils {
e.printStackTrace();
e.printStackTrace();
e.getMessage();
e.getMessage();
}
}
}*/
}
/**
* 生成背景透明的 文字水印
*
* @param width 生成图片宽度
* @param height 生成图片高度
* @param text 水印文字
* @param color 颜色对象
* @param font awt字体
* @param degree 水印文字旋转角度
* @param alpha 水印不透明度0f-1.0f
* @param imagePath 图片地址
*/
public
static
BufferedImage
waterMarkByText
(
int
width
,
int
height
,
String
text
,
Color
color
,
Font
font
,
Double
degree
,
float
alpha
,
String
imagePath
)
{
BufferedImage
buffImg
=
new
BufferedImage
(
width
,
height
,
BufferedImage
.
TYPE_INT_RGB
);
// 得到画笔对象
Graphics2D
g2d
=
buffImg
.
createGraphics
();
// 增加下面的代码使得背景透明
buffImg
=
g2d
.
getDeviceConfiguration
().
createCompatibleImage
(
width
,
height
,
Transparency
.
TRANSLUCENT
);
g2d
.
dispose
();
g2d
=
buffImg
.
createGraphics
();
// 设置对线段的锯齿状边缘处理
g2d
.
setRenderingHint
(
RenderingHints
.
KEY_INTERPOLATION
,
RenderingHints
.
VALUE_INTERPOLATION_BILINEAR
);
//把源图片写入
if
(
imagePath
!=
null
&&
!
imagePath
.
equals
(
""
))
{
try
{
Image
srcImg
=
ImageIO
.
read
(
new
File
(
imagePath
));
Image
image
=
srcImg
.
getScaledInstance
(
srcImg
.
getWidth
(
null
),
srcImg
.
getHeight
(
null
),
Image
.
SCALE_SMOOTH
);
g2d
.
drawImage
(
image
,
0
,
0
,
null
);
}
catch
(
IOException
e
)
{
log
.
error
(
"生成水印图片异常:"
,
e
);
}
}
// 设置水印旋转
if
(
null
!=
degree
)
{
//注意rotate函数参数theta,为弧度制,故需用Math.toRadians转换一下
//以矩形区域中央为圆心旋转
g2d
.
rotate
(
Math
.
toRadians
(
degree
),
(
double
)
buffImg
.
getWidth
()
/
2
,
(
double
)
buffImg
.
getHeight
()
/
2
);
}
// 设置颜色
g2d
.
setColor
(
color
);
// 设置 Font
g2d
.
setFont
(
font
);
// 设置透明度:1.0f为透明度 ,值从0-1.0,依次变得不透明
g2d
.
setComposite
(
AlphaComposite
.
getInstance
(
AlphaComposite
.
SRC_OVER
,
alpha
));
// 获取真实宽度
float
realWidth
=
getRealFontWidth
(
text
);
float
fontSize
=
font
.
getSize
();
// 计算绘图偏移x、y,使得使得水印文字在图片中居中,x、y坐标是基于Graphics2D.rotate过后的坐标系
float
x
=
0.5f
*
width
-
0.5f
*
fontSize
*
realWidth
;
float
y
=
0.5f
*
height
+
0.5f
*
fontSize
;
// 取绘制的字串宽度、高度中间点进行偏移,使得文字在图片坐标中居中
g2d
.
drawString
(
text
,
x
,
y
);
// 释放资源
g2d
.
dispose
();
return
buffImg
;
}
/**
* 获取真实字符串宽度,ascii字符占用0.5,中文字符占用1.0
*
* @param text 文字
* @return 宽度
*/
private
static
float
getRealFontWidth
(
String
text
)
{
int
len
=
text
.
length
();
float
width
=
0
f
;
for
(
int
i
=
0
;
i
<
len
;
i
++)
{
if
(
text
.
charAt
(
i
)
<
256
)
{
width
+=
0.5f
;
}
else
{
width
+=
1.0f
;
}
}
}
}
return
width
;
}
public
static
void
main
(
String
[]
args
)
throws
IOException
{
WatermarkImgUtils
.
addWatermark
(
"E:\\pic\\1724379763618.jpg"
,
"E:\\pic\\1724379763618_water5.jpg"
,
"广安市一业一证(照)一码"
,
"png"
);
/*
File watermarkFile = new File("watermark.png");
BufferedImage watermarkImage = ImageIO.read(watermarkFile);
Watermark watermark = new Watermark(Positions.CENTER, watermarkImage, 0.5f);
public
static
void
main
(
String
[]
args
)
{
Thumbnails.of("E:\\pic\\1724379763618.jpg").watermark(watermark).toFile("E:\\pic\\1724379763618_water2.jpg");
*/
WatermarkImgUtils
.
addWatermark
(
"E:\\pic\\1724379763618.jpg"
,
"E:\\pic\\1724379763618_water1.jpg"
,
"广安市一业一证(照)一码"
,
"jpg"
);
//int width, int height, String text, Color color, Font font, Double degree, float alpha, String imagePath
/* String sourceImage="E:\\pic\\1724379763618.jpg";
BufferedImage read = ImageIO.read(new File(sourceImage));
try {
BufferedImage bi = waterMarkByText(read.getWidth(),read.getHeight(),"广安市一业一证(照)一码",Color.RED,
new Font("宋体", Font.BOLD, 100),45.0,0.3f,sourceImage);
ImageIO.write(bi, "png", new File("E:\\pic\\1724379763618_water3.png"));
} catch (IOException e) {
e.printStackTrace();
}*/
}
}
}
}
one-certificate-manager/src/main/java/com/mortals/xhx/module/record/web/ApplyLogController.java
View file @
6bf0d4a1
...
@@ -21,6 +21,8 @@ import com.mortals.xhx.module.certificate.model.vo.CertificateDocumentPdu;
...
@@ -21,6 +21,8 @@ import com.mortals.xhx.module.certificate.model.vo.CertificateDocumentPdu;
import
com.mortals.xhx.module.certificate.service.CertificateCatalogService
;
import
com.mortals.xhx.module.certificate.service.CertificateCatalogService
;
import
com.mortals.xhx.module.certificate.service.CertificateDocumentService
;
import
com.mortals.xhx.module.certificate.service.CertificateDocumentService
;
import
com.mortals.xhx.module.certificate.service.CertificateIndustryService
;
import
com.mortals.xhx.module.certificate.service.CertificateIndustryService
;
import
net.coobird.thumbnailator.Thumbnailator
;
import
net.coobird.thumbnailator.Thumbnails
;
import
org.apache.poi.ss.usermodel.PictureData
;
import
org.apache.poi.ss.usermodel.PictureData
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -318,7 +320,9 @@ public class ApplyLogController extends BaseCRUDJsonBodyMappingController<ApplyL
...
@@ -318,7 +320,9 @@ public class ApplyLogController extends BaseCRUDJsonBodyMappingController<ApplyL
0
,
//y坐标修正值。 默认在中间,偏移量相对于中间偏移
0
,
//y坐标修正值。 默认在中间,偏移量相对于中间偏移
0.5f
//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
0.5f
//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
);
);
//Thumbnails.of()
// new Thumbnailator();
}
}
...
...
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