Golang中.emf(Enhanced Metafile)格式的分析与解析

Golang中.emf(Enhanced Metafile)格式的分析与解析 是否有任何Go语言包(免费版本)可以用来从.emf文件中获取宽度和高度?如果有,请分享详细信息。提前感谢。

3 回复

谢谢 Dean_Davidson

更多关于Golang中.emf(Enhanced Metafile)格式的分析与解析的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我对它们不熟悉,但你可以试试这些:

GitHub

GitHub - pzinovkin/emf: EMF 图像读取器/转换器

EMF 图像读取器/转换器。通过在 GitHub 上创建帐户为 pzinovkin/emf 的开发做出贡献。

GitHub

GitHub - yu4321/EMF-Metafile-String-Parser: 用于解析文本的简单解析器…

用于从 EMF 图元文件和 SPL 假脱机文件(仅包含 EMF 文件)中解析文本的简单解析器。 - yu4321/EMF-Metafile-String-Parser

或者,一篇可能帮助你编写自己的解析器的通用文章:

https://www.codeproject.com/Articles/1307140/Parse-understand-and-demystify-Enhanced-Meta-Files

在Go语言中,可以使用github.com/tdewolff/canvas包来解析.emf文件并获取其尺寸信息。这个包是开源且免费的,支持Enhanced Metafile格式的解析。

以下是一个示例代码,展示如何使用该包获取.emf文件的宽度和高度:

package main

import (
    "fmt"
    "os"
    "github.com/tdewolff/canvas"
)

func main() {
    // 打开.emf文件
    file, err := os.Open("example.emf")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    // 解析.emf文件
    emf, err := canvas.ParseEMF(file)
    if err != nil {
        panic(err)
    }

    // 获取边界框
    bounds := emf.Bounds()

    // 计算宽度和高度
    width := bounds.Max.X - bounds.Min.X
    height := bounds.Max.Y - bounds.Min.Y

    fmt.Printf("宽度: %.2f 单位\n", width)
    fmt.Printf("高度: %.2f 单位\n", height)
    fmt.Printf("边界框: %v\n", bounds)
}

首先安装依赖包:

go get github.com/tdewolff/canvas

这个包提供了完整的EMF解析功能,Bounds()方法返回的矩形包含了文件的完整尺寸信息。需要注意的是,EMF文件中使用的单位通常是逻辑单位,可能需要根据实际需求进行单位转换。

如果遇到解析问题,可以检查文件格式是否正确,或者尝试使用canvas包的其他相关方法进行调试。

回到顶部