美文网首页
用golang实现国土空间规划成果中jpg图片要求300dpi的

用golang实现国土空间规划成果中jpg图片要求300dpi的

作者: 开源GIS地图与信创 | 来源:发表于2022-12-11 13:45 被阅读0次

    国土空间规划成果,要求jpeg图片至少有300dpi,
    要求300dpi的原因主要是因为300dpi通常来说能保证打印机打印出来的成果看起来会比较清析。
    为了实现这个需求,我把google,百度,github,golang官网甚至最火的chat-gpt都翻了个底朝天。
    总之,结果就是目前golang生态体系中暂时还没有实现了获取jpg图片dpi的接口。
    所以我打算写一个来补一下这个生态的缺口。

    dpi和ppi是不是同一个东西?

    要获取dpi首先得知道dpi是个什么东西。


    image.png

    还不清楚的可以自己去这个链接里面看,人家已经总结得很好了,我就不再赘述了。
    https://blog.csdn.net/iteye_19871/article/details/81965791

    jpg文件的编码规范

    无论是golang标准库里面的image包,还是第二方包,都没有提供dpi获取的方法。
    image包中通过Config可以获取到:ColorModel、Width、Height这三个属性

    type Config struct {    
      ColorModel    color.Model     
      Width, Height int 
    }
    

    通过这几天最火的gpt来查找,说是可以用第三方库github.com/dsoprea/go-exif/v2来实现。

    正在思考,请等待......
    
    Go语言无法直接获取JPEG图片的DPI,可以通过使用第三方库exif来获取。
    
    exif是一个Go语言库,用于解析JPEG图像的元数据,包括DPI。
    
    使用exif库,可以使用以下代码获取JPEG图片的DPI:
    
    package main
    
    import (
        "fmt"
        "log"
        "os"
        "github.com/dsoprea/go-exif/v2"
    )
    
    func main() {
        // 打开图片文件
        file, err := os.Open("test.jpg")
        if err != nil {
            log.Fatal(err)
        }
        defer file.Close()
    
        // 解析图片文件的元数据
        exifData, err := exif.ReadExifData(file)
        if err != nil {
            log.Fatal(err)
        }
    
        // 获取DPI
        xResolution, err := exifData.Get("XResolution")
        if err != nil {
            log.Fatal(err)
        }
        yResolution, err := exifData.Get("YResolution")
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("XResolution: %v, YResolution: %v\n", xResolution, yResolution)
    }
    
    image.png

    很明显,代码不对,但是提供了一个很好的实现思路,可以按这个思路去找,每次查询返回的结果会不太一样。


    image.png

    最简单的方法是从二进制中去解析:

    正规的官方网站:https://exiftool.org/TagNames/JPEG.html
    jpg的编码大概长这样:

    image.png

    最有用的就是前面一部分了,我们要的信息在APP0里面。
    可以看一下APP0里面的内容:


    image.png

    图中的00 60 00 60 ,x方向密度和y方向密度就是我们要的信息了。


    image.png

    我们把16进制的60转换一下,值正好是96,与我们在windows中看到的一样。


    image.png
    image.png

    具体信息可参考大佬的网站:
    https://blog.csdn.net/picone/article/details/123788128

    相关文章

      网友评论

          本文标题:用golang实现国土空间规划成果中jpg图片要求300dpi的

          本文链接:https://www.haomeiwen.com/subject/icyfqdtx.html