如何使用SixLabors ImageSharp将TIFF保存为单条带格式?
将非单条带TIFF转为单条带TIFF的实现方法
可以实现,核心是通过TiffEncoder的参数手动指定RowsPerStrip为图像的总行数(即等于ImageLength),覆盖原文件的条带设置。以下是具体实现方式:
.NET 环境下的代码示例
若使用System.Drawing.Imaging(.NET Core/.NET 5+需先安装System.Drawing.Common NuGet包):
using System.Drawing; using System.Drawing.Imaging; using System.Linq; public void ConvertToSingleStripTiff(string inputPath, string outputPath) { using (Image image = Image.FromFile(inputPath)) { // 获取TIFF编码器 ImageCodecInfo tiffCodec = ImageCodecInfo.GetImageEncoders() .First(codec => codec.FormatID == ImageFormat.Tiff.Guid); // 设置编码器参数:将RowsPerStrip设为图像总行数 EncoderParameters encoderParams = new EncoderParameters(1); encoderParams.Param[0] = new EncoderParameter( Encoder.SaveFlag, (long)EncoderValue.MultiFrame | (long)image.Height); // 保存为单条带TIFF image.Save(outputPath, tiffCodec, encoderParams); } }
关键说明
- 直接通过
Encoder.SaveFlag参数将RowsPerStrip值设为image.Height,强制生成单条带格式,替代SaveAsTiff默认保留原条带设置的逻辑。 - 若使用ImageSharp等现代图像库,可更直观地设置参数:
using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Tiff; using SixLabors.ImageSharp.PixelFormats; public void ConvertToSingleStripTiffWithImageSharp(string inputPath, string outputPath) { using (Image<Rgba32> image = Image.Load<Rgba32>(inputPath)) { TiffEncoder encoder = new TiffEncoder { RowsPerStrip = image.Height }; image.Save(outputPath, encoder); } }
注意事项
- 单条带TIFF会将整幅图像作为一个条带存储,大尺寸图像可能会增加内存占用,需根据场景权衡使用。
内容的提问来源于stack exchange,提问作者AdjunctProfPlum
相关产品推荐
相关产品推荐

