You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Go语言中读取多页TIFF并拆分提取单张图像?

在Go语言中拆分多页TIFF为单张图像

用Go拆分多页TIFF很简单,核心就是用tiff.DecodeAll读取所有页面,再把每个image.Image对象单独编码保存成文件。下面是具体实现:

完整代码示例

保存为TIFF格式

package main

import (
	"image"
	"image/tiff"
	"os"
	"path/filepath"
	"strconv"
)

func main() {
	// 替换为你的多页TIFF文件路径
	inputPath := "multi_page.tiff"
	inputFile, err := os.Open(inputPath)
	if err != nil {
		panic(err)
	}
	defer inputFile.Close()

	// 解码所有页面,得到包含所有页的TIFF对象
	tiffData, err := tiff.DecodeAll(inputFile)
	if err != nil {
		panic(err)
	}

	// 遍历每一页,逐个保存
	for pageIndex, pageImg := range tiffData.Pages {
		// 生成输出文件名,比如同目录下的page_0.tiff、page_1.tiff
		outputName := filepath.Join(filepath.Dir(inputPath), "page_"+strconv.Itoa(pageIndex)+".tiff")
		outputFile, err := os.Create(outputName)
		if err != nil {
			panic(err)
		}
		// 别忘了关闭文件
		defer outputFile.Close()

		// 将当前页编码为TIFF并写入文件
		if err := tiff.Encode(outputFile, pageImg, nil); err != nil {
			panic(err)
		}
	}
}

保存为PNG/JPEG格式

如果需要转成其他格式,比如PNG,只需要替换编码部分为对应包的Encode方法即可:

// 保存为PNG的话,导入image/png包,然后替换编码代码:
err = png.Encode(outputFile, pageImg)

// 保存为JPEG的话,导入image/jpeg包,编码时可以指定质量参数:
err = jpeg.Encode(outputFile, pageImg, &jpeg.Options{Quality: 90})

关键说明

  • tiff.DecodeAll返回的tiff.TIFF结构体里,Pages字段就是所有页面的image.Image切片,直接遍历就行
  • 编码时的第三个参数(比如tiff.Encode的nil)可以传对应格式的选项,比如TIFF的压缩方式、JPEG的质量
  • 实际项目里别直接用panic,换成自定义的错误处理逻辑会更稳妥,比如打印错误后继续处理下一页

内容的提问来源于stack exchange,提问作者Abin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:37:49