登录
首页 >  Golang >  Go问答

使用 Golang 读取多页的 tiff 文件和提取图像

来源:stackoverflow

时间:2024-03-19 16:27:21 440浏览 收藏

在 Go 语言中处理多页 TIFF 文件时,开发者可能需要将每一页 TIFF 转换为单独的图像。为此,可以使用 github.com/chai2010/tiff 模块的 DecodeAll 方法,该方法返回一个包含所有 TIFF 页面的图像切片。然而,这些图像还无法直接使用,需要进一步处理才能将其转换为标准的 Go 图像类型。

问题内容

如何在 Go 中将多页 tiff 分割成图像? image/tiff 的 DecodeAll 返回 TIFF,其中包含 image.image。但不知道如何将每个转换为图像?


正确答案


由于关于您在问题中使用的软件包的信息不多,我假设您使用了 github.com/chai2010/tiff 模块。它只包含 decodeall 方法。我使用了公开的多页tiff。然后我使用了包文档内的代码。无论如何,我在这里引用它

package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
    "log"
    "path/filepath"

    "github.com/chai2010/tiff"
)

func main() {
    b, err := ioutil.ReadFile("Multi_page24bpp.tif")
    if err != nil {
        panic(err)
    }

    // Decode tiff
    m, errors, err := tiff.DecodeAll(bytes.NewReader(b))
    if err != nil {
        log.Println(err)
    }

    // Encode tiff
    for i := 0; i < len(m); i++ {
        for j := 0; j < len(m[i]); j++ {
            newname := fmt.Sprintf("%s-%02d-%02d.tif", filepath.Base("Multi_page24bpp.tif"), i, j)
            if errors[i][j] != nil {
                log.Printf("%s: %v\n", newname, err)
                continue
            }

            var buf bytes.Buffer
            if err = tiff.Encode(&buf, m[i][j], nil); err != nil {
                log.Fatal(err)
            }
            if err = ioutil.WriteFile(newname, buf.Bytes(), 0666); err != nil {
                log.Fatal(err)
            }
            fmt.Printf("Save %s ok\n", newname)
        }
    }
}

它按照您的要求创建了多个 tif 图像。我希望这就是你的意思

以上就是《使用 Golang 读取多页的 tiff 文件和提取图像》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>