如何在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
相关产品推荐
相关产品推荐

