图片下载之 svg 转 png

前言

今天在下载某个网站的图片的时候遇到一个很有意思的下载机制,就是他没有发送任何网络请求,也没有什么页面跳转就完成了 png 图片的下载,这让没见识的我非常好奇,于是决定一探究竟,看看他是怎么实现的。

实现方式

这里通过我本地已经复现的 demo 来演示。
页面很简单,只有一张 svg 图片和一个下载 png 的按钮:
image.png
同时也可以很清楚的看到页面并没有任何关于 png 图片的内容,那么我们怎么实现下载呢?
上文我们提到这个下载并没有使用网络请求,那我们能依靠的就只有这个 svg 了,也就是说我们要实现的其实是把 svg 转成 png 然后下载到本地。
坦白说我前端水平一般,只会增删改查,所以实现逻辑只能交给 AI 来写了🐶,我就负责改吧改吧:
image.png
其实驯服 AI 的过程并不顺利,尝试了多次才勉强给我想要的答案,当然还有一个重要原因是我 prompt 写的太烂:
image.png
这个过程总结起来就是:

  1. 获取 svg 数据
  2. 创建临时路径
  3. 通过 cavans 画出来
  4. 通过 a 标签下载

需要源码的话,可以关注微信公众号co松柏回复png获取。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Java的第三方库来将SVG图片换为PNG格式。一个常用的库是Apache Batik。以下是一个示例代码,演示如何使用Batik将SVG换为PNG: ```java import org.apache.batik.transcoder.TranscoderInput; import org.apache.batik.transcoder.TranscoderOutput; import org.apache.batik.transcoder.image.PNGTranscoder; import java.io.*; public class SVGtoPNGConverter { public static void convertToPNG(String svgFile, String pngFile) throws Exception { // 创建SVG换器 PNGTranscoder transcoder = new PNGTranscoder(); // 设置输入源和输出目标 try (InputStream inputStream = new FileInputStream(svgFile); OutputStream outputStream = new FileOutputStream(pngFile)) { TranscoderInput transcoderInput = new TranscoderInput(inputStream); TranscoderOutput transcoderOutput = new TranscoderOutput(outputStream); // 执行换 transcoder.transcode(transcoderInput, transcoderOutput); } } public static void main(String[] args) { String svgFile = "path/to/input.svg"; String pngFile = "path/to/output.png"; try { convertToPNG(svgFile, pngFile); System.out.println("SVG to PNG conversion successful!"); } catch (Exception e) { System.out.println("Error converting SVG to PNG: " + e.getMessage()); } } } ``` 请将`path/to/input.svg`替换为要换的SVG文件的路径,将`path/to/output.png`替换为要保存换后的PNG文件的路径。运行代码后,它将把SVG文件换为PNG格式,并将其保存到指定的输出路径。 请注意,使用Batik进行SVG换需要添加Batik库的依赖。你可以从Apache官方网站下载Batik库的JAR文件,并将其添加到你的项目中。 希望这可以帮助到你!如果你有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值