java实现图片格式转换(svg、png、webp)


一、svg文件

1.1 svg介绍

SVG 意为可缩放矢量图形(Scalable Vector Graphics), 使用 XML 格式定义图像。因此对svg文件的操作,可以看做对xml文件的解析。svg基础知识可以参考svg教程,在此不做过多赘述。

1.2 svg文件操作

1.2.1 获取svg文件源码

读取svg文件并转换为字符串类型,可得到源码

public String svgOriginFile(MultipartFile file) throws IOException {
   
        if (file != null) {
   
            InputStream fileInput = file.getInputStream();
            byte[] inputByte = new byte[fileInput.available()];
            fileInput.read(inputByte);
            String originFile = new String(inputByte, "UTF-8");
            log.info("Get svg originFile [{}]", originFile);
            fileInput.close();
            return originFile;
        }
        return null;
    }

1.2.2 获取svg文件宽高

读取svg的xml文件,获取svg文件的width、height属性

public Float svgSize(String originFile, String lengthName) throws IOException {
   
        if (originFile != null && lengthName != null) {
   
            Document doc = svgDocument(originFile);
            Element element = doc.getDocumentElement();
            String length = lengthReg(element.getAttribute(lengthName));
            if (length == "" || length == null) {
   
                int num = lengthName.equals("width") ? 2 : 3;
                String viewBox = element.getAttribute("viewBox");
                length = viewBox.split(" ")[num];
            }
            log.info("Svg {} size is {}", lengthName, length);
            return Float.parseFloat(length);
        }
        return null;
    }


public Document svgDocument(String originFile) throws IOException {
   
        byte[] bytes = originFile.getBytes("utf-8");
        ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
        String parser = XMLResourceDescriptor.getXMLParserClassName();
        SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
        Document doc = f.createDocument(null, inputStream);
        return doc;
    }

public String lengthReg(String str) {
   
        //用正则表达式
        String reg = "[^0-9]";
        //Pattern类的作用在于编译正则表达式后创建一个匹配模式.
        Pattern p = Pattern.compile(reg);
        //Matcher类使用Pattern实例提供的模式信息对正则表达式进行匹配
        Matcher m = p.matcher(str);
        return m.replaceAll(
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将SVG格式的图片转换为JPG格式,可以使用Java代码来实现。以下是一种可能的实现方法: 1. 首先,需要使用Java的图形库,如`javax.imageio`和`java.awt.image.BufferedImage`。确保在项目中导入这些库。 2. 创建一个名为`SvgToJpgConverter`的Java类,该类封装了SVG转换为JPG的代码。 3. 在`SvgToJpgConverter`类中,创建一个公共静态方法,例如`convertSvgToJpg`,该方法接受两个参数:SVG图片的文件路径和目标JPG图片的文件路径。 4. 在`convertSvgToJpg`方法中,使用`javax.imageio.ImageIO`的`read`方法加载SVG图片并创建`java.awt.image.BufferedImage`对象。 5. 为了将SVG渲染为JPG,我们需要创建一个`java.awt.image.BufferedImage`对象,并设置其尺寸与SVG图片一致。 6. 使用`java.awt.Graphics2D`的`drawImage`方法,将SVG图片绘制到`BufferedImage`对象中。 7. 创建一个名为`outputFile`的`File`对象,表示目标JPG图片的文件路径。 8. 使用`javax.imageio.ImageIO`的`write`方法将`BufferedImage`对象写入到`outputFile`中。第一个参数是`BufferedImage`对象,第二个参数是目标图片的格式字符串,这里是`"jpg"`。 9. 最后,为了确保资源的释放,我们可以在`finally`块中关闭输入流和输出流。 下面是一个示例的`SvgToJpgConverter`类的代码: ```java import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class SvgToJpgConverter { public static void convertSvgToJpg(String svgFilePath, String jpgFilePath) { try { BufferedImage svgImage = ImageIO.read(new File(svgFilePath)); BufferedImage jpgImage = new BufferedImage(svgImage.getWidth(), svgImage.getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2d = jpgImage.createGraphics(); g2d.drawImage(svgImage, 0, 0, null); g2d.dispose(); File outputFile = new File(jpgFilePath); ImageIO.write(jpgImage, "jpg", outputFile); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { String svgFilePath = "path/to/svg/image.svg"; String jpgFilePath = "path/to/output/image.jpg"; convertSvgToJpg(svgFilePath, jpgFilePath); } } ``` 在上面的代码中,`main`方法中给出了使用示例。你需要将`svgFilePath`替换为SVG图片的实际文件路径,将`jpgFilePath`替换为目标JPG图片的实际文件路径。运行`main`方法,即可将SVG图片转换为JPG格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值