【问题标题】:checking if two svg files are the same检查两个 svg 文件是否相同
【发布时间】:2014-08-23 07:52:16
【问题描述】:

我需要想出一种方法来检测两个 SVG 文件是否相同,使用 Java。我不太熟悉 SVG 的工作原理,但我认为 file->string 和字符串比较不是要走的路——有元素排序,一些可选参数可能会被省略,诸如此类。我最好怎么做?

以防万一 - 我需要它来测试同事正在制作的 SVGCGM 转换器。我正在考虑进行 SVG->CGM->SVG 往返转换并将最终结果与原始 SVG 进行比较。 测试这种转换器的有效方法,对吧?

【问题讨论】:

  • 如何使用 drawImage 将两个 SVG 图像写入画布,然后逐个像素比较两个图像。
  • 我想我可以试试。但是,逐像素比较两个图像听起来不是很快。有没有什么好的方法可以根据文件的 xml 内容进行比较?在这种情况下,它将是 xml 比较。
  • 这就是 reftest-analyzer 的工作原理,而且几乎是即时的。它采用编码为两个 base64 图像的 reftest 失败并比较它们:view-source://people.mozilla.org/~tmielczarek/reftest-analyzer.xhtml

标签: java svg


【解决方案1】:

您可以使用 XML-Unit 来比较两个 XML 字符串。要获取 XML 字符串,您可以读取文件。

Maven 导入:

<dependency>
            <groupId>org.xmlunit</groupId>
            <artifactId>xmlunit-core</artifactId>
            <version>2.8.2</version>
        </dependency>

        <dependency>
            <groupId>org.xmlunit</groupId>
            <artifactId>xmlunit-matchers</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>org.xmlunit</groupId>
            <artifactId>xmlunit-assertj3</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>org.xmlunit</groupId>
            <artifactId>xmlunit-parent</artifactId>
            <version>2.8.2</version>
            <type>pom</type>
        </dependency>

读入 XML 字符串

String xml = new String(
    Files.readAllBytes(xmlFile.toPath()), StandardCharsets.UTF_8);

检查:

public void isXmlEqual(String xmlString1, String xmlString2){
        
        Diff diff = DiffBuilder.compare(xmlString1).withTest(xmlString2).ignoreComments().ignoreWhitespace().build();
        Iterator<Difference> differenceIterator = diff.getDifferences().iterator();
        int differenceSize = 0;
        while (differenceIterator.hasNext()) {
            Difference difference = differenceIterator.next();
            log.info( difference.toString() );
            differenceSize++;
        }
        if (differenceSize == 0){
            log.info( "Images are the same" );
        }
    }

【讨论】:

  • 当然,但问题似乎是关于渲染的图像是否看起来相同,并且有无限数量的 SVG 文件具有不同的标记但相同的渲染。
猜你喜欢
  • 2014-06-11
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 2023-02-10
  • 2019-11-25
  • 2010-10-02
  • 2023-04-07
相关资源
最近更新 更多