https://avatars.dicebear.com/api/jdenticon/jeden.svg
当然还可以控制头像的一些属性,比如发型,肤色,鼻子,嘴巴等
具体可以参考:https://avatars.dicebear.com/styles/avataaars
具体运用到实战:
首先是需要调这个第三方的api接口,它会返回给你一串字符串,我们拿到字符串,写入文件,注意后缀要以.svg结尾,否则这个图片无法查看。(一般区块链的图片,上链的大多都是svg文件)
然后我们需要将这个图片给前端展示,这里就需要将svg转成jpg(苹果前端和苹果前端也是可以处理的,不过比较麻烦,这里就需要我们处理一下)。
接着将图片转成jpg之后,还需要将它上传到图片存储服务器上,这里我以AWS的S3为例。
最后jpg图片上传成功以后,需要清理之前在服务器上生成的svg和jpg文件。
/**
-
@Description newsContentPicture为需要生成图片的内容
-
@Author zhiwei Liao
-
@Date 2021/9/14 16:28
**/
@Override
public String uploadNewsContentPictureS3(String newsContentPicture) throws Exception{
String osName = System.getProperties().getProperty(“os.name”);
String svgPath = null;
String jpgPath = null;
URL url = null;
log.info(“========操作系统:” + osName);
String fileName = String.valueOf(System.currentTimeMillis());
if(osName.contains(“Linux”)){
svgPath = linuxSvgPath + fileName + “.svg”;
jpgPath = linuxJpgPath + fileName + “.jpg”;
}else if(osName.contains(“Windows”)){
svgPath = System.getProperty(“user.dir”) + “\svg\” + fileName + “.svg”;
jpgPath = System.getProperty(“user.dir”) + “\jpg\” + fileName + “.jpg”;
}
//新闻图片内容转svg
File svgFile = readIoStringToFile(newsContentPicture, svgPath);
if(svgFile != null){
//svg文件转jpg
File jpgFile = SVGConverterUtils.svgFileChangeJpg(svgFile, jpgPath);
if(jpgFile != null){
//上传jpg图片到s3
AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion(clientRegion)
.withCredentials(new AWSStaticCredentialsProvider(awsCredentials)).build();
PutObjectRequest request = new PutObjectRequest(bucketName, fileName, jpgFile);
ObjectMetadata metadata = new ObjectMetadata();
metadata.addUserMetadata(“x-amz-meta-title”, “someTitle”);
request.setMetadata(metadata);
request.setKey(fileName);
s3Client.putObject(request);
url = s3Client.getUrl(bucketName, fileName);
if (svgFile.exists()) {
svgFile.delete();
}
if (jpgFile.exists()) {
jpgFile.delete();
}
}
}
return url.toString();
}
/**
-
把IO字符串输出到文件
-
@param ioString
-
@param filePath
*/
public static File readIoStringToFile(String ioString, String filePath) {
log.info(“========readIoStringToFile.filePath:” + filePath);
File file = null;
FileOutputStream fos = null;
try {
file = new File(filePath);
log.info(“========readIoStringToFile.file:” + file);
if (file.exists()) {
file.delete();
}else {
file.getParentFile().mkdir();
file.createNewFile();
}
fos = new FileOutputStream(file);
fos.write(ioString.getBytes(“UTF-8”));
fos.flush();
} catch (Exception e) {
log.error(“readIoStringToFile.Exception异常了:” + e.getMessage());
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
log.error(“readIoStringToFile.IOException异常了:” + e.getMessage());
e.printStackTrace();
}
}
}
return file;
}
svg转jpg依赖:
org.apache.xmlgraphics
batik-all
1.12
pom
org.apache.xmlgraphics
fop
2.4
svg转jpg的工具类:
package com.common.entity.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.batik.transcoder.*;
import org.apache.batik.transcoder.image.JPEGTranscoder;
import org.apache.batik.transcoder.image.PNGTranscoder;
import org.apache.fop.render.ps.EPSTranscoder;
import org.apache.fop.render.ps.PSTranscoder;
import org.apache.fop.svg.PDFTranscoder;
import java.io.*;
/**
-
@author zhiwei Liao
-
@version 1.0
-
@Description 利用Apache Batik实现 SVG转PDF/PNG/JPG
-
@Date 2021/9/13 16:26
*/
@Slf4j
public class SVGConverterUtils {
public static void main(String[] args) throws Exception {
String svgpath = “E:\svgfile\c.svg”;
File svgFile = new File(svgpath);
String name = svgFile.getName();
name = name.substring(0, name.lastIndexOf(“.”));
// converter.svg2PDF(new File(svgpath), new File(“E:/” + name + “_SVG文件转PDF.pdf”));
// converter.svg2PNG(new File(svgpath), new File(“E:/” + name + “_SVG文件转PNG.png”));
svg2JPEG(new File(svgpath), new File(“E:/” + name + “_SVG文件转JPG.jpg”));
String svgCode = svg2String(new File(svgpath));
// converter.svg2PDF(svgCode, “D:/” + name + “_SVG代码转PDF.pdf”);
// converter.svg2PNG(svgCode, “D:/” + name + “_SVG代码转PNG.png”);
// converter.svg2JPEG(svgCode, “D:/” + name + “_SVG代码转JPG.jpg”);
// converter.svg2PDF(svgCode, new FileOutputStream(new File(“E:/svgfile/” + name + “_SVG代码转输出流.pdf”)));
// converter.svg2PNG(svgCode, new FileOutputStream(new File(“E:/svgfile/” + name + “_SVG代码转输出流.png”)));
// converter.svg2JPEG(svgCode, new FileOutputStream(new File(“E:/svgfile/” + name + “_SVG代码转输出流.jpg”)));
// converter.svg2EPS(svgCode, new FileOutputStream(new File(“E:/svgfile/” + name + “_SVG代码转输出流.eps”)));
// converter.svg2PS(svgCode, new FileOutputStream(new File(“E:/svgfile/” + name + “_SVG代码转输出流.ps”)));
svgtoeps(svgCode, new FileOutputStream(new File(“E:/svgfile/” + name + “_SVG代码转输出流.eps”)));
}
public static File svgFileChangeJpg(File svgFile, String jpgPath){
log.info(“========svgFileChangeJpg.jpgPath:” + jpgPath);
try {
File file = new File(jpgPath);
if (file.exists()) {
file.delete();
}else {
file.getParentFile().mkdir();
file.createNewFile();
}
log.info(“========svgFileChangeJpg.jpgFile:” + file);
log.info(“========svgFileChangeJpg.svgFile:” + svgFile);
svg2JPEG(svgFile, file);
return file;
} catch (Exception e) {
log.error(e.getMessage());
}
return null;
}
public static void svgtoeps(String svgCode, OutputStream os){
EPSTranscoder epsTranscoder = new EPSTranscoder();
try {
svgCode = svgCode.replaceAll(“:rect”, “rect”);
TranscoderInput input = new TranscoderInput(new ByteArrayInputStream(svgCode.getBytes()));
TranscoderOutput output = new TranscoderOutput(os);
epsTranscoder.transcode(input, output);
os.flush();
os.close();
} catch (Exception e) {
}
}
/**
-
SVG转PNG
-
@param svgCode SVG代码
-
@param outpath 输出路径
-
@throws TranscoderException
-
@throws IOException
*/
public void svg2PNG(String svgCode, String outpath) throws TranscoderException, IOException {
Transcoder transcoder = new PNGTranscoder();
svgConverte(svgCode, outpath, transcoder);
}
/**
-
SVG转PNG
-
@param svgCode SVG代码
-
@param out 输出流
-
@throws TranscoderException
-
@throws IOException
*/
public void svg2PNG(String svgCode, OutputStream out) throws TranscoderException, IOException {
Transcoder transcoder = new PNGTranscoder();
svgConverte(svgCode, out, transcoder);
}
/**
-
SVG转PNG
-
@param svgFile SVG文件
-
@param outFile 输出文件
-
@throws TranscoderException
-
@throws IOException
*/
public void svg2PNG(File svgFile, File outFile) throws TranscoderException, IOException {
Transcoder transcoder = new PNGTranscoder();
svgConverte(svgFile, outFile, transcoder);
}
/**
-
SVG转JPG
-
@param svgCode SVG代码
-
@param outpath 输出路径
-
@throws TranscoderException
-
@throws IOException
*/
public void svg2JPEG(String svgCode, String outpath) throws TranscoderException, IOException {
Transcoder transcoder = new JPEGTranscoder();
//为防止ERROR: The JPEG quality has not been specified. Use the default one: no compression 错误,需如下配置
transcoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, 0.99f);
svgConverte(svgCode, outpath, transcoder);
}
/**
-
SVG转JPG
-
@param svgCode SVG代码
-
@param out 输出流
-
@throws TranscoderException
-
@throws IOException
*/
public void svg2JPEG(String svgCode, OutputStream out) throws TranscoderException, IOException {
Transcoder transcoder = new JPEGTranscoder();
//为防止ERROR: The JPEG quality has not been specified. Use the default one: no compression 错误,需如下配置
transcoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, 0.99f);
svgConverte(svgCode, out, transcoder);
}
/**
-
SVG转JPG
-
@param svgFile SVG文件
-
@param outFile 输出文件
-
@throws TranscoderException
-
@throws IOException
*/
public static void svg2JPEG(File svgFile, File outFile) throws TranscoderException, IOException {
Transcoder transcoder = new JPEGTranscoder();
//为防止ERROR: The JPEG quality has not been specified. Use the default one: no compression 错误,需如下配置
transcoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, 0.99f);
svgConverte(svgFile, outFile, transcoder);
}
/**
-
SVG转PDF
-
@param svgCode SVG代码
-
@param outpath 输出路径
-
@throws TranscoderException
-
@throws IOException
*/
public void svg2PDF(String svgCode, String outpath) throws TranscoderException, IOException {
Transcoder transcoder = new PDFTranscoder();
svgConverte(svgCode, outpath, transcoder);
}
/**
-
SVG转PS
-
@param svgCode
-
@param outpath
-
@throws TranscoderException
-
@throws IOException
*/
public void svg2PS(String svgCode, String outpath) throws TranscoderException, IOException {
Transcoder transcoder = new PSTranscoder();
svgConverte(svgCode, outpath, transcoder);
}
/**
-
SVG转PS
-
@param svgCode SVG代码
-
@param out 输出流
-
@throws TranscoderException
-
@throws IOException
*/
public void svg2PS(String svgCode, OutputStream out) throws TranscoderException, IOException {
Transcoder transcoder = new PSTranscoder();
svgConverte(svgCode, out, transcoder);
}
/**
-
SVG转EPS
-
@param svgCode SVG代码
-
@param out 输出流
-
@throws TranscoderException
-
@throws IOException
*/
public void svg2EPS(String svgCode, OutputStream out) throws TranscoderException, IOException {
Transcoder transcoder = new EPSTranscoder();
svgConverte(svgCode, out, transcoder);
}
/**
-
SVG转EPS
-
@param svgCode
-
@param outpath
-
@throws TranscoderException
-
@throws IOException
*/
public void svg2EPS(String svgCode, String outpath) throws TranscoderException, IOException {
Transcoder transcoder = new EPSTranscoder();
svgConverte(svgCode, outpath, transcoder);
}
/**
-
SVG转PDF
-
@param svgCode SVG代码
-
@param out 输出流
-
@throws TranscoderException
-
@throws IOException
*/
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
param svgCode SVG代码
-
@param out 输出流
-
@throws TranscoderException
-
@throws IOException
*/
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-sdO8xMdE-1715627760404)]
[外链图片转存中…(img-fwn1hqKX-1715627760405)]
[外链图片转存中…(img-2e6WIUhU-1715627760405)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!