贵港网站建设动态,腾讯企点官网入口,二网站手,电子商务网站建设的定义svg转png写了一个spring boot项目#xff0c;支持传入svg文件转出png图片#xff0c;并且自定义转出png的宽和高。主要代码如下#xff1a;所需依赖如下#xff1a;演示如下#xff1a;首先#xff0c;运行项目使用接口调用工具调用接口发送请求#xff0c;提取文件1000…
svg转png写了一个spring boot项目支持传入svg文件转出png图片并且自定义转出png的宽和高。主要代码如下所需依赖如下演示如下首先运行项目使用接口调用工具调用接口发送请求提取文件10000分辨率的超清大图项目已经开源开源链接如下写了一个spring boot项目支持传入svg文件转出png图片并且自定义转出png的宽和高。 svg是矢量图因此我们用svg可以转出任意大小的高清png大图。 主要代码如下
import org.apache.batik.transcoder.Transcoder;
import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.PNGTranscoder;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Objects;/*** author Peter Cheung* 2023/2/16 15:21*/
RestController
public class SvgToPngController {/*** 上传svg* p* 然后* p* 下载png* p* consumes定义multipart/form-data*/GetMapping(path download, consumes MediaType.MULTIPART_FORM_DATA_VALUE)public void download(float height, float width, MultipartFile file, HttpServletResponse response) throws IOException, TranscoderException {//MultipartFile转InputStreamInputStream in new ByteArrayInputStream(file.getBytes());Transcoder transcoder new PNGTranscoder();//设置png图片的宽和长transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, width);transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, height);try {TranscoderInput input new TranscoderInput(in);//清空responseresponse.reset();//强制下载不打开response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);//设置编码为UTF_8response.setCharacterEncoding(StandardCharsets.UTF_8.name());//Content-Disposition的作用告知浏览器以何种方式显示响应返回的文件用浏览器打开还是以附件的形式下载到本地保存//attachment表示以附件方式下载 inline表示在线打开 Content-Disposition:inline; filename文件名.mp3//filename表示文件的默认名称因为网络传输只支持URL编码因此需要将文件名URL编码后进行传输前端收到后需要反编码才能获取到真正的名称response.setHeader(Content-Disposition, attachment;filename URLEncoder.encode((Objects.requireNonNull(file.getOriginalFilename()).split(\\.))[0], StandardCharsets.UTF_8.name()) .png);TranscoderOutput output new TranscoderOutput(response.getOutputStream());transcoder.transcode(input, output);} finally {in.close();}}
}
所需依赖如下
dependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--文件上传--dependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion1.4/version/dependencydependencygroupIdcommons-io/groupIdartifactIdcommons-io/artifactIdversion2.11.0/version/dependencydependencygroupIdbatik/groupIdartifactIdbatik-svggen/artifactIdversion1.6/version/dependencydependencygroupIdbatik/groupIdartifactIdbatik-awt-util/artifactIdversion1.6/version/dependencydependencygroupIdbatik/groupIdartifactIdbatik-bridge/artifactIdversion1.6/version/dependencydependencygroupIdbatik/groupIdartifactIdbatik-css/artifactIdversion1.6/version/dependencydependencygroupIdbatik/groupIdartifactIdbatik-dom/artifactIdversion1.6/version/dependencydependencygroupIdbatik/groupIdartifactIdbatik-gvt/artifactIdversion1.6/version/dependencydependencygroupIdbatik/groupIdartifactIdbatik-parser/artifactIdversion1.6/version/dependencydependencygroupIdbatik/groupIdartifactIdbatik-script/artifactIdversion1.6/version/dependencydependencygroupIdbatik/groupIdartifactIdbatik-svg-dom/artifactIdversion1.6/version/dependencydependencygroupIdbatik/groupIdartifactIdbatik-transcoder/artifactIdversion1.6/version/dependencydependencygroupIdbatik/groupIdartifactIdbatik-util/artifactIdversion1.6/version/dependencydependencygroupIdbatik/groupIdartifactIdbatik-xml/artifactIdversion1.6/version/dependency!-- 此处不能使用2.9.1版本使用2.9.1生成png会失败 --dependencygroupIdxerces/groupIdartifactIdxercesImpl/artifactIdversion2.5.0/version/dependencydependencygroupIdxml-apis/groupIdartifactIdxmlParserAPIs/artifactIdversion2.0.2/version/dependencydependencygroupIdorg.axsl.org.w3c.dom.svg/groupIdartifactIdsvg-dom-java/artifactIdversion1.1/version/dependencydependencygroupIdxml-apis/groupIdartifactIdxml-apis/artifactIdversion2.0.0/version/dependencydependencygroupIdorg.w3c.css/groupIdartifactIdsac/artifactIdversion1.3/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency
/dependencies演示如下
首先运行项目 使用接口调用工具调用接口 注意get请求路径如同body里使用form-data三个参数file是你要上传的svg文件height是转出png图片的高width是转出png图片的长height和width是数字类型支持整数和小数。 发送请求提取文件 如图我将转出的png放于桌面 10000分辨率的超清大图 项目已经开源开源链接如下
svg转png