ImageSharp TIFF 编解码器深度解析:压缩格式、光度解释与标签支持全览

📅 发布时间:2026/10/15 16:59:16
ImageSharp TIFF 编解码器深度解析:压缩格式、光度解释与标签支持全览
图像处理图形学【免费下载链接】ImageSharpA modern, cross-platform, 2D Graphics library for .NET项目地址https://gitcode.com/gh_mirrors/im/ImageSharp点击查看免费下载TIFF 是一个极具包容性的图像容器格式同一个.tif文件内部可能使用十几种不同的压缩算法、七八种不同的色彩解释方式以及数百个不同的 IFD 标签。ImageSharp 仓库中的 TIFF codec 实现文档 以能力矩阵的形式逐项列出了编码器Encoder与解码器Decoder对各种压缩格式、光度解释和标签的支持现状。本文将以此为骨架结合src/ImageSharp/Formats/Tiff/目录下的源码实现与tests/ImageSharp.Tests/Formats/Tiff/下的测试用例讲清 ImageSharp TIFF 编解码器“支持什么、不支持什么、底层如何实现、代码中如何配置”帮助你在实际项目中避开兼容性陷阱。一、TIFF 编解码器架构总览在深入矩阵之前先建立整体认知。ImageSharp 的 TIFF 模块遵循标准格式插件架构TiffFormat.cs 定义格式本体Name为TIFF默认 MIME 为image/tiff支持image/tiff、image/tiff-fx两种 MIME 与tiff、tif两种扩展名TiffConfigurationModule.cs 负责向ImageFormatsManager注册TiffEncoder、TiffDecoder.Instance和TiffImageFormatDetectorTiffImageFormatDetector.cs 通过前 8 字节识别文件0x49 0x49小端/0x4D 0x4D大端字节序标记配合魔数42经典 TIFF或43BigTIFF。也就是说ImageSharp 的 TIFF 检测器同时支持经典 TIFF 与 BigTIFFTiffEncoder.cs 与 TiffDecoder.cs 分别是编解码入口最终由内部TiffEncoderCore/TiffDecoderCore完成实际工作。值得注意的一点是TIFF 的 IFDImage File Directory结构天然支持多帧ImageSharp 将每个 IFD 映射为ImageFrame因此多帧 TIFF 的读写与 GIF 类似都是通过image.Frames集合来操作。README 明确指出解码器当前仅支持“所有帧尺寸相同”的多帧图像任何帧尺寸大于根帧的多帧文件会直接抛出NotSupported详见 TiffDecoderCore.cs 中DecodeFrame的尺寸校验逻辑。二、压缩格式支持矩阵与实现原理README 的压缩能力表是选择 TIFF 编码参数时最重要的参考完整继承如下压缩格式EncoderDecoder说明None无压缩YY原样存储像素数据Ccitt1DYY1 维 Modified Huffman RLET.4 一维PackBitsYYTIFF 6.0 第 9 节的游程压缩CcittGroup3FaxYYCCITT T.4 二值编码Group 3CcittGroup4FaxYYCCITT T.6 二值编码Group 4LzwYY基于 ImageSharp GIF LZW 实现可进一步共享或按场景优化Old JpegY仅支持 chunky连续配置JpegTechnote 2YY新式 JPEG 压缩DeflateTechnote 2YY基于 PNG Deflate 实现Old DeflateTechnote 2Y兼容旧式 Deflatetag 32946WebpY解码 WebP 压缩的 TIFF 像素数据2.1 源码中的实现分布压缩相关的全部实现集中在 Compression 目录压缩器CompressorsNoCompressor、PackBitsCompressor、LzwCompressorTiffLzwEncoder、T4BitCompressor、T6BitCompressor、TiffCcittCompressor、DeflateCompressor、TiffJpegCompressor解压器DecompressorsNoneTiffCompression、PackBitsTiffCompression、LzwTiffCompression、ModifiedHuffmanTiffCompressionCCITT 1D、T4TiffCompression、T6TiffCompression、DeflateTiffCompression、JpegTiffCompression、OldJpegTiffCompression、WebpTiffCompression选择逻辑由 TiffCompressorFactory.cs 与 TiffDecompressorsFactory.cs 承担。从 TiffDecompressorsFactory.cs 可以看到两类重要约束Predictor 只允许配合 LZW 与 Deflate——其余压缩路径中若出现 predictor 会触发DebugGuard断言失败Fax 类压缩T4/T6/HuffmanRLE逐行解码在平铺tiled场景下必须使用 tile 行宽计算缓冲这也是工厂单独传入tileWidth/tileHeight的原因。2.2 底层依赖关系README 特别注明了两处代码复用关系这在源码中可以交叉印证LZW 基于 ImageSharp GIF LZW 实现——TIFF 的 LZW 编码/解码器与 GIF 的 LZW 属于同一算法家族ImageSharp 在TiffLzwEncoder/TiffLzwDecoder中按 TIFF 规范做了适配如 code size 与 early change 处理差异README 也诚实指出该代码“可以被修改为i共享或ii各自优化”Deflate 基于 PNG Deflate——TIFF Technote 2 的 Deflate 使用 zlib 数据格式实现位于DeflateCompressor/DeflateTiffCompression与 PNG 解码路径共用底层的 zlib 读写基础设施SixLabors.ImageSharp.Compression.Zlib。2.3 编码时的自动降级策略你可能会好奇如果编码时选择了“未实现”的压缩怎么办TiffEncoderCore.cs 的SanitizeAndSetEncoderOptions给出了完整的兜底规则1-bit CCITT 压缩Ccitt1D/Group3/Group4只能用于 1 bpp 图像若 bpp 不是 1自动降级—— 8 bpp时改为None否则改为DeflateJPEG 压缩不支持 48/64/96/128 bpp 高精度整数样本自动降级为Deflate浮点样本下Fax 与 JPEG 压缩无法写入自动降级为Deflate。这意味着编码器选项在“不合理”时会被静默修正最终写入文件的参数以修正后的值为准可以通过解码后的TiffFrameMetadata.Compression验证。三、高精度样本支持16/32 位整数与 32 位浮点README 中关于高精度样本的段落是本模块的一大亮点原文要点如下对于高精度样本编码器和解码器支持无符号 16 位与 32 位 RGB/RGBA 样本48、64、96 或 128 bits per pixel。同时支持 32 位浮点灰度、RGB、RGBA 样本32、96 或 128 bits per pixel。浮点编码支持 None、PackBits、Lzw 与 Deflate 压缩。浮点 predictor 不支持。3.1 位深枚举完整梳理TiffBitsPerPixel.cs 定义了从 1 到 128 的全部位深枚举逐一说明枚举值位深语义与编码器行为Bit11双色图bilevelBit44调色板图像Bit6/10/12/146/10/12/14编码器暂不支持请求后自动降级为 24 bpp RGBBit88灰度或调色板图像Bit1616灰度L16Bit2424每通道 1 字节的 RGBBit30/36/4230/36/42每通道 10/12/14 位编码器按48 bpp写入Bit3232四个 8 位整数样本或一个 32 位浮点样本Bit4848三个 16 位整数样本Bit6464三个 16 位样本 16 位 alphaBit9696三个 32 位样本整数或浮点Bit128128四个 32 位样本整数或浮点3.2 浮点样本的编码规则从 TiffEncoderCore.cs 的浮点分支可以提炼出几条硬性规则浮点模式只接受Bit32 / Bit96 / Bit128三种位深其他值会被重新计算Bit32一律按灰度写入BlackIsZero或WhiteIsZeroBit96/Bit128一律按Rgb写入浮点压缩仅限None / PackBits / Deflate / Lzw其余压缩自动降级为Deflate浮点 predictorTiffPredictor.FloatingPoint不支持——编码端强制写入TiffPredictor.None解码端在 TiffDecoderOptionsParser.cs 中遇到FloatingPointpredictor 直接抛出NotSupported。对应地TiffDecoder.cs 在解码时会根据元数据自动选择像素类型浮点样本解码为RgbaVector或带预乘 alpha 的RgbaVectorP整数 RGB 样本则按位深匹配Rgb48/Rgba64/Rgb96/Rgba128其余默认Rgba32。测试 TiffEncoderTests.cs 中的FloatSingleComponent_RoundTripsWithoutChangingIntensity、Rgb48_RoundTrips16BitSamples等用例专门验证了这些高精度路径的往返无损性。四、光度解释Photometric Interpretation支持矩阵光度解释决定像素数值如何映射为颜色是 TIFF 兼容性的核心。README 的能力表完整继承如下光度解释EncoderDecoder说明WhiteIsZeroYY通用实现 1/4/8 位优化实现BlackIsZeroYY通用实现 1/4/8 位优化实现RgbChunky 连续YY通用实现 Rgb888 优化实现RgbPlanar 平面Y仅通用实现PaletteColorYY仅通用实现TransparencyMask不支持SeparatedTIFF 扩展Y通常是 CMYKYCbCrTIFF 扩展Y解码支持CieLabTIFF 扩展Y解码支持IccLabTechNote 1不支持CMYKY解码支持Tiled ImagesY平铺图像解码支持4.1 编码端的光度解释自动映射编码时若不显式指定PhotometricInterpretationTiffEncoderCore.cs 会按位深自动选择最合适的解释方式Bit1使用 CCITT 压缩时强制WhiteIsZero二值 CCITT 数据的标准解释否则BlackIsZeroBit4 / Bit8PaletteColor允许显式指定为 BlackIsZero/WhiteIsZeroBit16BlackIsZero等价于 L16 灰度Bit48 / Bit64 及以上Rgb。4.2 解码端的色彩类型派发解码端 TiffDecoderOptionsParser.cs 的ParseColorType是最复杂的派发逻辑它会根据PhotometricInterpretation BitsPerSample PlanarConfiguration SampleFormat组合出TiffColorTypeWhiteIsZero / BlackIsZero仅接受单通道支持 1/4/8/16/24/32 位及 32 位浮点等细分类型Rgb仅接受 3 或 4 通道且各通道位深相等Chunky 下支持 2~32 位含浮点十余种细分类型Planar 下支持 8/16/24/32 位PaletteColor需要ColorMap标签缺失则抛异常YCbCr仅 8 位/通道需YCbCrCoefficients、YCbCrSubsampling、ReferenceBlackWhite等参数配合Chunky 与 Planar 各有独立类型SeparatedCMYK仅 8 位/通道、4 通道且不支持自定义InkNamesCieLab3 通道Chunky/Planar 均可。从源码结构看如PhotometricInterpretation目录下的解码器文件README 所述“1/4/8 位优化实现”与“Rgb888 优化实现”对应着WhiteIsZero1Bit、WhiteIsZero4Bit、WhiteIsZero8Bit、BlackIsZero*、Rgb888等专用解码器通用实现则覆盖 16/24/32 位等高精度场景。五、Baseline TIFF 标签支持矩阵TIFF 6.0 基线标签共 28 个README 的能力表完整继承如下Y 表示支持空表示不支持-表示“不适用/特殊处理”基线标签EncoderDecoder说明NewSubfileTypeSubfileTypeImageWidthYYImageLengthYYBitsPerSampleYYCompressionYYPhotometricInterpretationYYThresholdingCellWidthCellLengthFillOrderYImageDescriptionYYMakeYYModelYYStripOffsetsYYOrientation-忽略。许多读取器都忽略此标签SamplesPerPixelY-当前被忽略因为可从 BitsPerSample 数量推断RowsPerStripYYStripByteCountsYYMinSampleValueMaxSampleValueXResolutionYYYResolutionYYPlanarConfigurationYY编码器只写 chunky解码器同时支持 chunky 与 planarFreeOffsetsFreeByteCountsGrayResponseUnitGrayResponseCurveResolutionUnitYYSoftwareYYDateTimeYYArtistYYHostComputerYYColorMapYYExtraSamplesYY编码器写入未关联整数 alpha 或关联/未关联浮点 alpha未指定的 alpha 数据不支持CopyrightYY5.1 几个值得展开的“特殊”标签Orientation 被“忽略”README 注明“许多读取器都忽略此标签”ImageSharp 解码器同样不处理旋转语义这是与主流读取器保持一致的做法SamplesPerSample 被忽略通道数完全由BitsPerSample数组的长度推断见 TiffBitsPerSample.cs其Channels属性统计非零通道数因此无需再读SamplesPerPixelPlanarConfiguration 的不对称编码器固定输出 chunky连续布局解码器两条路径都实现——DecodeStripsChunky/DecodeTilesChunky与DecodeStripsPlanar/DecodeTilesPlanar并存于 TiffDecoderCore.csExtraSamples 的 alpha 语义解码端 TiffDecoderOptionsParser.cs 只消费第一个样本0未关联 alpha与1关联 alpha会被保留其他值直接丢弃同时专门兼容了 CorelDRAW 产生的非标准2CorelDrawUnassociatedAlphaData按 libtiff 的处理方式映射为未关联 alpha。5.2 编码端 IFD 写入细节编码器在 TiffEncoderCore.cs 的WriteIfd中按 tag 升序写入条目长度小于等于 4 字节的值直接内联否则写入独立数据块并在 IFD 中记录偏移TiffEncoderEntriesCollector负责把图像元数据、帧元数据、格式信息位深、压缩、光度解释、predictor 等收集成 IFD 条目。IFD 偏移需要对齐到 2 字节边界编码器在必要处会补写一个填充字节。六、扩展 TIFF 标签支持矩阵扩展标签覆盖 TIFF 6.0 之后的规范增补Supplement 1/2、RFC 2301 等完整继承如下扩展标签EncoderDecoder说明NewSubfileTypeDocumentNameYYPageNameXPositionYPositionT4OptionsYT6OptionsPageNumberTransferFunctionPredictorYY仅 Horizontal不用于浮点样本WhitePointPrimaryChromaticitiesHalftoneHintsTileWidth-TileLength-TileOffsets-TileByteCounts-BadFaxLinesCleanFaxDataConsecutiveBadFaxLinesSubIFDs-InkSetYCMYKInkNames-NumberOfInks-DotRangeTargetPrinterSampleFormatYY编码器写入 IEEE 浮点默认无符号整数。有符号与复数样本不支持SMinSampleValueSMaxSampleValueTransferRangeClipPathXClipPathUnitsYClipPathUnitsIndexedJPEGTablesOPIProxyGlobalParametersIFDProfileTypeFaxProfileCodingMethodsVersionYearModeNumberDecodeDefaultImageColorJPEGProcJPEGInterchangeFormatJPEGInterchangeFormatLengthJPEGRestartIntervalJPEGLosslessPredictorsJPEGPointTransformsJPEGQTablesJPEGDCTablesJPEGACTablesYCbCrCoefficientsYYCbCrSubSamplingYYCbCrPositioningReferenceBlackWhiteYStripRowCounts--见 RFC 2301Internet Fax 文件格式XMPYYImageIDImageLayer6.1 Predictor 的实际约束Predictor是扩展标签中最常用也最易误用的一个。README 明确仅支持 Horizontal水平差分且不用于浮点样本。源码进一步印证TiffPredictor.cs 定义None1、Horizontal2、FloatingPoint3其中 FloatingPoint 注释为“编码器不支持若选择将回退为 None”TiffEncoderCore.cs 的HasPredictor方法限定只有 Deflate 与 Lzw 压缩才允许启用 predictor其余压缩一律强制None解码端 TiffDecoderOptionsParser.cs 遇到FloatingPointpredictor 直接抛NotSupported。6.2 SampleFormat 与 StripRowCounts 的细节SampleFormat解码端只接受UnsignedInteger(1)与Float(3)两种样本格式出现有符号整数或复数格式直接抛异常编码端写入 IEEE 浮点或默认无符号整数TiffSampleFormat.csStripRowCountsRFC 2301 引入的可变长 strip 计数README 两列均为-源码中 TiffDecoderOptionsParser.cs 检测到该标签存在时直接抛出NotSupported“不支持可变大小 strip”Tile 系列标签README 表格中 Decoder 列为-但从源码看解码器实际上通过 TiffDecoderCore.cs 的DecodeImageWithTiles/DecodeTilesChunky/DecodeTilesPlanar完整消费了TileWidth、TileLength、TileOffsets、TileByteCounts。README 的-更应理解为“这些标签由解码流程内部消费、不对外暴露”并且VerifyRequiredFieldsArePresent会强制校验 tile 场景下这些字段的完整性对 planar 配置还要求TileOffsets必须存在缺失即抛异常。七、私有 TIFF 标签支持矩阵私有标签由厂商与行业组织定义如 Adobe DNG、GeoTIFF、Photoshop、GPS 等ImageSharp 的支持非常克制完整继承如下私有标签EncoderDecoder说明Wang AnnotationMD FileTagMD ScalePixelMD ColorTableMD LabNameMD SampleInfoMD PrepDateMD PrepTimeMD FileUnitsModelPixelScaleTagIPTCYYINGR Packet Data TagINGR Flag RegistersIrasB Transformation MatrixModelTiepointTagModelTransformationTagPhotoshopExif IFD-0x8769 SubExifICC ProfileYYGeoKeyDirectoryTagGeoDoubleParamsTagGeoAsciiParamsTagGPS IFDHylaFAX FaxRecvParamsHylaFAX FaxSubAddressHylaFAX FaxRecvTimeImageSourceDataInteroperability IFDGDAL_METADATAGDAL_NODATAOce Scanjob DescriptionOce Application SelectorOce Identification NumberOce ImageLogic CharacteristicsDNGVersionDNGBackwardVersionUniqueCameraModelLocalizedCameraModelCFAPlaneColorCFALayoutLinearizationTableBlackLevelRepeatDimBlackLevelBlackLevelDeltaHBlackLevelDeltaVWhiteLevelDefaultScaleDefaultCropOriginDefaultCropSizeColorMatrix1ColorMatrix2CameraCalibration1CameraCalibration2ReductionMatrix1ReductionMatrix2AnalogBalanceAsShotNeutralAsShotWhiteXYBaselineExposureBaselineNoiseBaselineSharpnessBayerGreenSplitLinearResponseLimitCameraSerialNumberLensInfoChromaBlurRadiusAntiAliasStrengthDNGPrivateDataMakerNoteSafetyCalibrationIlluminant1CalibrationIlluminant2BestQualityScaleAlias Layer Metadata从矩阵可以看出私有标签中 ImageSharp 仅实现了IPTC与ICC Profile的读写以及Exif IFD的部分解码-表示有内部处理但非完整支持。大量 DNG 相机原始数据标签DNGVersion、ColorMatrix、BlackLevel 等均不支持这一点对处理数码相机 RAW/DNG 文件的开发者尤其重要——DNG 的完整解析不在 ImageSharp TIFF 编解码器的能力范围内。八、编码实战TiffEncoder 选项与使用示例编码入口是SaveAsTiff系列扩展方法由 ImageExtensions.Save.cs 生成支持路径与流两种目标、同步与异步两种调用方式using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Tiff; using SixLabors.ImageSharp.Formats.Tiff.Constants; using SixLabors.ImageSharp.PixelFormats; using ImageRgba32 image Image.LoadRgba32(input.png); // 基础用法使用默认 TiffEncoder image.SaveAsTiff(output.tif); // 高级用法显式配置编码参数 TiffEncoder encoder new() { BitsPerPixel TiffBitsPerPixel.Bit24, // 24 bpp RGB默认值 Compression TiffCompression.Deflate, // 压缩算法 CompressionLevel DeflateCompressionLevel.DefaultCompression, // Deflate 级别 1-9 PhotometricInterpretation TiffPhotometricInterpretation.Rgb, HorizontalPredictor TiffPredictor.Horizontal, // 仅 Deflate/Lzw 时生效 }; image.SaveAsTiff(output-deflate.tif, encoder);8.1 编码器选项全解TiffEncoder.cs 继承自QuantizingImageEncoder构造时默认使用KnownQuantizers.Hexadecatree量化器用于调色板类输出其公开选项包括选项类型说明BitsPerPixelTiffBitsPerPixel?输出位深不指定时取自帧元数据再回退到默认Bit24SampleFormatTiffSampleFormat?样本格式浮点样本固定 32 位/分量CompressionTiffCompression?压缩算法默认NoneCompressionLevelDeflateCompressionLevel?Deflate 压缩级别 1-9默认DefaultCompressionPhotometricInterpretationTiffPhotometricInterpretation?RGB、调色板、灰度或双色不指定或编码器不支持时用 RGBHorizontalPredictorTiffPredictor?水平预测可提升 Deflate/Lzw 的压缩比选项优先级遵循“EncoderOptions 帧元数据 默认值”的规则见 TiffEncoderCore.cs 中Encode方法而SanitizeAndSetEncoderOptions会在写入前对组合做一致性修正详见 2.3 与 4.1 节。8.2 多帧 TIFF 编码由于每个ImageFrame会写成一个 IFD多帧编码就是把多个帧放进同一个Image再保存using ImageRgba32 image new(100, 100); // 追加帧尺寸必须与根帧一致 image.Frames.AddFrame(image.Frames.RootFrame.Clone()); image.Frames.AddFrame(image.Frames.RootFrame.Clone()); image.SaveAsTiff(multiframe.tif, new TiffEncoder { Compression TiffCompression.Lzw });对应测试 TiffEncoderMultiframeTests.cs 覆盖了多帧编码、添加/移除帧后重编码、以及“不同尺寸变体多帧”不支持等场景。九、解码实战流程、校验与限制解码入口为Image.Load/Image.LoadAsync/Image.Identify。TIFF 解码的核心链路在 TiffDecoderCore.csDirectoryReader读取文件头与全部 IFD 目录Ifd 目录解析字节序与 BigTIFF 标记每个 IFD 由TiffFrameMetadata.Parse解析出位深、样本格式、压缩、光度解释、predictor、ink set 等字段TiffFrameMetadata.csVerifyAndParse对压缩与色彩类型做合法性校验与派发TiffDecoderOptionsParser.csFillOrder为LeastSignificantBitFirst时只允许 1 bpp 双色 TIFF浮点 predictor 不支持SampleFormat仅允许无符号整数与浮点YCbCrSubsampling必须恰有 2 个值且垂直子采样不超过水平子采样StripRowCounts可变长 strip不支持校验 tile/strip 必需字段StripOffsets/StripByteCounts或TileOffsets/TileWidth/TileLength等是否齐全依据PhotometricInterpretation BitsPerSample PlanarConfiguration SampleFormat派发颜色解码器ParseColorType依据压缩标签派发解压器ParseCompression按 chunky/planar × strip/tile 四种组合之一逐块解压、逐块解码RGB 兼容类型PaletteColor到Rgba32323232Planar区间在帧级执行 ICC Profile 颜色转换YCbCr、CMYK、Lab 等类型不做 ICC 转换TiffDecoderCore.csDecodeFrame中有明确注释说明。9.1 几个值得注意的解码限制多帧尺寸限制所有帧必须与根帧等宽等高否则抛NotSupported超大 strip 限制未压缩 strip 超过Int32.MaxValue字节时NoneTiffCompression路径会退化为逐行读取解码压缩 strip 超过该阈值则直接抛NotSupportedOld Jpeg 兼容细节需要JPEGInterchangeFormat提供 SOI 标记偏移且不支持 planar 配置YCbCr 光度解释的 Old Jpeg 会被改写为 RGB 交给 JPEG 解码器处理Jpeg 压缩细节无论文件中YCbCrSubsampling写什么解码时统一重置为[1, 1]JPEG 解码器自行处理子采样缺少JPEGTables的 YCbCr JPEG 同样改写为 RGB 路径源码注释关联了对应 issue。十、测试验证与进一步阅读TIFF 模块的测试集中在 tests/ImageSharp.Tests/Formats/TiffTiffDecoderTests.cs多帧解码、压缩格式往返、tile 图像解码等TiffEncoderTests.cs高精度 16 位Rgb48/Rgba64、浮点FloatSingleComponent、各种压缩与 predictor 组合的往返测试TiffEncoderMultiframeTests.cs多帧编码与限制验证Compression 子目录None/PackBits/Lzw/Deflate/CCITT 各解压器的单元测试PhotometricInterpretation 子目录WhiteIsZero/BlackIsZero/Palette/RGB/RGBA/Planar 颜色解码器测试BigTiffDecoderTests.cs与BigTiffMetadataTests.csBigTIFF魔数 43解码验证。如需深入底层建议按此顺序阅读源码TiffEncoder.cs → TiffEncoderCore.cs → TiffDecoder.cs → TiffDecoderCore.cs → TiffDecoderOptionsParser.cs → Compression 目录。README 中引用的 TIFF 6.0 规范、Supplement 1/2/3、TIFF-F/FXRFC 2301、CCITT T.4/T.6、EXIF 2.3、XMP 等参考资料原文可在本仓库的 TIFF 模块目录 中查阅对应规范文档仓库附带 TIFF-v6.pdf 等 PDF 原文与 T-REC-T.4/T.6 标准文本。十一、总结选择 TIFF 参数时的决策要点综合 README 能力矩阵与源码实现在实际项目中可以按以下清单快速决策通用彩色照片/图形RgbBit24压缩可选None最快、PackBits中等、Lzw或Deflate高压缩比可配HorizontalPredictor传真/文档扫描二值WhiteIsZeroBit1CcittGroup3Fax/CcittGroup4Fax/Ccitt1D高精度影像医学、遥感整数走Bit48/64/96/128浮点走SampleFormat.FloatBit32/96/128压缩限None/PackBits/Lzw/Deflate且不要启用 predictor兼容性红线解码可放宽支持 planar、tile、CMYK、YCbCr、CieLab、WebP 压缩、Old Jpeg 等编码保守仅 chunky、仅 WhiteIsZero/BlackIsZero/Rgb/PaletteColor、不支持 tiled 输出、DNG 系列私有标签全部不支持多帧所有帧必须同尺寸写多帧用Frames.AddFrame读多帧按Frames索引访问。掌握这张“支持矩阵”与背后的降级规则就能在 ImageSharp 生态中安全、高效地处理绝大多数 TIFF 场景。赞分享图像处理图形学【免费下载链接】ImageSharpA modern, cross-platform, 2D Graphics library for .NET项目地址https://gitcode.com/gh_mirrors/im/ImageSharp点击查看免费下载相关推荐极速压缩新体验Rufus工具Zstandard格式支持深度解析极速压缩新体验Rufus工具Zstandard格式支持深度解析 在日常使用USB设备时你是否遇到过系统镜像体积过大导致传输缓慢的问题是否因压缩格式不兼容而桌面应用开发工具PeaZip 免费压缩文件管理器深度解析200 格式支持、安全特性与源码构建指南PeaZip 免费压缩文件管理器深度解析200 格式支持、安全特性与源码构建指南 PeaZip 是一个面向 Linux、macOS 和 Windows 的免桌面应用Rufus压缩解压多种压缩格式支持Rufus压缩解压多种压缩格式支持 概述 Rufus作为一款功能强大的USB启动盘制作工具其内置的BLEDBase Library for Easy De桌面应用开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考