// 网络图片地址 以下所使用的ImgUtil 是 Hutool 工具
String reportTemplateUrlStr = "
https://xxxxxxxxxxxxxx.com/xxxxxxxxxxxxxxxxx.jpg
";
URL reportTemplateUrl = new URL(reportTemplateUrlStr);
BufferedImage image = ImgUtil.read(reportTemplateUrl);
//
模板图片地址 本地图片地址
File file =
new
File("C:\\Users\\admin\\Desktop\\doctor_card\\card_template.jpg"
);
BufferedImage tem
=
ImgUtil.read(file);
//
嵌入图片地址 本地图片地址
File fileInside =
new
File("C:\\Users\\admin\\Desktop\\doctor_card\\ricky.jpg"
);
BufferedImage imgInside
=
ImgUtil.read(fileInside);
//
编辑嵌入图片的尺寸
Image scaledInstance = imgInside.getScaledInstance(26, 26
, Image.SCALE_DEFAULT);
//
创建画布
BufferedImage image =
new
BufferedImage(tem.getWidth(), tem.getHeight(), BufferedImage.TYPE_INT_RGB);
//
获取画笔 将 模板图片画上画布
image.getGraphics().drawImage(tem,0,0,
null
);
//
创建超级画笔
Graphics2D g2d =
image.createGraphics();
//
填充内嵌图片
g2d.drawImage(scaledInstance,1446,639,
null
);
//
创建字体 姓名
Font fontName =
new
Font("微软雅黑", Font.PLAIN, 50
);
//
创建 颜色
Color colorName =
new
Color(5,167,179
);
g2d.setFont(fontName);
g2d.setColor(colorName);
g2d.drawString(
"王二麻子",300,370
);
//
抗锯齿
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, (RenderingHints.VALUE_TEXT_ANTIALIAS_GASP));
//
释放资源
g2d.dispose();
//
BufferedImage 转 MultipartFile
MultipartFile mfile =
null
;
try
{
//
BufferedImage 转化为 ByteArrayOutputStream
ByteArrayOutputStream out =
new
ByteArrayOutputStream();
ImageIO.write(image,
"jpg"
, out);
//
ByteArrayOutputStream 转化为 byte[]
byte
[] imageByte =
out.toByteArray();
String base
= "data:image/png;base64," +
Base64.getEncoder().encodeToString(imageByte);
mfile
=
BASE64DecodedMultipartFile.base64ToMultipart(base);
}
catch
(Exception e) {
e.printStackTrace();
File toFile
=
null
;
if
(mfile!=
null
&& mfile.getSize()>0
) {
//
获取文件原名称
String originalFilename =
mfile.getOriginalFilename();
//
获取文件格式
String fileFormat = originalFilename.substring(originalFilename.lastIndexOf("."
));
//
转file 生成随机文件名 (File.separator : 作用相当于 '\')
String uuid = UUID.randomUUID().toString().trim().replaceAll("-", ""
);
toFile
=
new
File("C:\\Users\\admin\\Desktop"+File.separator+uuid+
fileFormat);
//
最终绝对路径
String absolutePath =
null
;
try
{
//
获取绝对路径 并去除[..]这样的符号,返回的是标准的绝对路径
absolutePath =
toFile.getCanonicalPath();
//
判断路径中的文件夹是否存在,如果不存在,则先创建文件夹
String dirPath = absolutePath.substring(0
, absolutePath.lastIndexOf(File.separator));
File dir
=
new
File(dirPath);
if
(!
dir.exists()){
dir.mkdirs();
InputStream ins
=
mfile.getInputStream();
inputStreamToFile(ins,toFile);
ins.close();
}
catch
(IOException e) {
e.printStackTrace();
private
static
void
inputStreamToFile(InputStream ins, File file) {
try
{
OutputStream os
=
new
FileOutputStream(file);
int
bytesRead = 0
;
byte
[] buffer =
new
byte
[8192
];
while
((bytesRead = ins.read(buffer, 0, 8192)) != -1
) {
os.write(buffer,
0
, bytesRead);
os.close();
ins.close();
}
catch
(Exception e) {
e.printStackTrace();