Ghostscript 和 ImageMagick 将每通道 16 位(48 位)TIFF 图像转换为 PDF 或 PDF/A

Ghostscript and ImageMagick to convert 16 bit per channel (48 bit) TIFF image to PDF or PDF/A

我正在使用 ImageMagick 和 Ghostscript 从 TIFF 图像创建 PDF 文件。

我的源 tiff 是每通道 16 位,没有 alpha(48 位图像),带有附加的 ICC 配置文件 (AdobeRGB),我想在最终的 PDF 中保留它。

convert input.tif[0] -density 600 -alpha Off -size 5809x9408 -depth 16 intermediate.ps

这需要我输入的 tiff 图像(只是主图像,而不是通过使用 [0] 的缩略图)并从位图中创建一个 .ps 文件。

当我查看 PostScript 文件的大小时,它与源 TIFF 的大小大致相同(比 328MB tiff 大 3-4 MB),但我无法判断 . ps 是每通道 8 位或 16 位。

然后,当我使用 GhostScript 将其转换为 PDF 时,我在 PDF 中得到每个通道 8 位。

gs -dPDFA=1 -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sDefaultRGBProfile=AdobeRGB1998.icc -dOverrideICC -sOutputFile=output.pdf -r600 -P PDFA_def.ps -f custom.joboptions intermediate.ps

如果我使用 pdfimages 检查 PDF,它会显示每个通道 8 位。

pdfimages -list output.pdf

page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    5809  9408  rgb     3   8  image  no        10  0   600   600 74.1M  47%

我的 PDFA_def.ps 的内容已从默认的 Ghostscript 安装修改为指定 Adob​​eRGB (1998) 作为颜色配置文件:

%!
% This is a sample prefix file for creating a PDF/A document.
% Feel free to modify entries marked with "Customize".
% This assumes an ICC profile to reside in the file (ISO Coated sb.icc),
% unless the user modifies the corresponding line below.

% Define entries in the document Info dictionary :
/ICCProfile (AdobeRGB1998.icc) % Customise
def

[ /Title (Title)       % Customise
  /DOCINFO pdfmark

% Define an ICC profile :

[/_objdef {icc_PDFA} /type /stream /OBJ pdfmark
[{icc_PDFA}
<<
  /N currentpagedevice /ProcessColorModel known {
    currentpagedevice /ProcessColorModel get dup /DeviceGray eq
    {pop 1} {
      /DeviceRGB eq
      {3}{4} ifelse
    } ifelse
  } {
    (ERROR, unable to determine ProcessColorModel) == flush
  } ifelse
>> /PUT pdfmark
[{icc_PDFA} ICCProfile (r) file /PUT pdfmark

% Define the output intent dictionary :

[/_objdef {OutputIntent_PDFA} /type /dict /OBJ pdfmark
[{OutputIntent_PDFA} <<
  /Type /OutputIntent             % Must be so (the standard requires).
  /S /GTS_PDFA1                   % Must be so (the standard requires).
  /DestOutputProfile {icc_PDFA}            % Must be so (see above).
  /OutputConditionIdentifier (sRGB)      % Customize
>> /PUT pdfmark
[{Catalog} <</OutputIntents [ {OutputIntent_PDFA} ]>> /PUT pdfmark

我还有一个 custom.joboptions 文件,它是我在 Acrobat Distiller 中创建的,然后针对 PDF/A 合规性进行了修改 - 我也试图在该文件中强制使用 16 位图像,但是我仍然在 PDF 中获得 8 位图像。

我不知道 Ghostscript 尊重这些选项中的多少以及忽略了多少。如果我在制作 PDF 时不使用此 custom.joboptions 文件,图像将被降采样到非常低的分辨率。

<<
  /ASCII85EncodePages false
  /AllowTransparency false
  /AutoPositionEPSFiles true
  /AutoRotatePages /All
  /Binding /Left
  /CalGrayProfile (Dot Gain 20%)
  /CalRGBProfile (sRGB IEC61966-2.1)
  /CalCMYKProfile (U.S. Web Coated 0SWOP1 v2)
  /sRGBProfile (sRGB IEC61966-2.1)
  /CannotEmbedFontPolicy /Error
  /CompatibilityLevel 1.4
  /CompressObjects /Off
  /CompressPages true
  /ConvertImagesToIndexed true
  /PassThroughJPEGImages true
  /CreateJobTicket false
  /DefaultRenderingIntent /Default
  /DetectBlends true
  /DetectCurves 0.0000
  /ColorConversionStrategy /LeaveColorUnchanged
  /DoThumbnails false
  /EmbedAllFonts true
  /EmbedOpenType false
  /ParseICCProfilesInComments true
  /EmbedJobOptions false
  /DSCReportingLevel 0
  /EmitDSCWarnings false
  /EndPage -1
  /ImageMemory 1048576
  /LockDistillerParams true
  /MaxSubsetPct 100
  /Optimize false
  /OPM 1
  /ParseDSCComments true
  /ParseDSCCommentsForDocInfo true
  /PreserveCopyPage true
  /PreserveDICMYKValues true
  /PreserveEPSInfo true
  /PreserveFlatness true
  /PreserveHalftoneInfo false
  /PreserveOPIComments false
  /PreserveOverprintSettings false
  /StartPage 1
  /SubsetFonts false
  /TransferFunctionInfo /Apply
  /UCRandBGInfo /Remove
  /UsePrologue false
  /ColorSettingsFile (None)
  /AlwaysEmbed [ true
  ]
  /NeverEmbed [ true
  ]
  /AntiAliasColorImages false
  /CropColorImages true
  /ColorImageMinResolution 600
  /ColorImageMinResolutionPolicy /OK
  /DownsampleColorImages false
  /ColorImageDownsampleType /Average
  /ColorImageResolution 600
  /ColorImageDepth -1
  /ColorImageMinDownsampleDepth 16
  /ColorImageDownsampleThreshold 1.50000
  /EncodeColorImages true
  /ColorImageFilter /FlateEncode
  /AutoFilterColorImages false
  /ColorImageAutoFilterStrategy /JPEG
  /ColorACSImageDict <<
    /QFactor 0.15
    /HSamples [1 1 1 1] /VSamples [1 1 1 1]
  >>
  /ColorImageDict <<
    /QFactor 0.15
    /HSamples [1 1 1 1] /VSamples [1 1 1 1]
  >>
  /JPEG2000ColorACSImageDict <<
    /TileWidth 256
    /TileHeight 256
    /Quality 30
  >>
  /JPEG2000ColorImageDict <<
    /TileWidth 256
    /TileHeight 256
    /Quality 30
  >>
  /AntiAliasGrayImages false
  /CropGrayImages true
  /GrayImageMinResolution 300
  /GrayImageMinResolutionPolicy /OK
  /DownsampleGrayImages false
  /GrayImageDownsampleType /Average
  /GrayImageResolution 600
  /GrayImageDepth -1
  /GrayImageMinDownsampleDepth 2
  /GrayImageDownsampleThreshold 1.50000
  /EncodeGrayImages true
  /GrayImageFilter /FlateEncode
  /AutoFilterGrayImages false
  /GrayImageAutoFilterStrategy /JPEG
  /GrayACSImageDict <<
    /QFactor 0.15
    /HSamples [1 1 1 1] /VSamples [1 1 1 1]
  >>
  /GrayImageDict <<
    /QFactor 0.15
    /HSamples [1 1 1 1] /VSamples [1 1 1 1]
  >>
  /JPEG2000GrayACSImageDict <<
    /TileWidth 256
    /TileHeight 256
    /Quality 30
  >>
  /JPEG2000GrayImageDict <<
    /TileWidth 256
    /TileHeight 256
    /Quality 30
  >>
  /AntiAliasMonoImages false
  /CropMonoImages true
  /MonoImageMinResolution 1200
  /MonoImageMinResolutionPolicy /OK
  /DownsampleMonoImages false
  /MonoImageDownsampleType /Average
  /MonoImageResolution 2400
  /MonoImageDepth -1
  /MonoImageDownsampleThreshold 1.50000
  /EncodeMonoImages true
  /MonoImageFilter /CCITTFaxEncode
  /MonoImageDict <<
    /K -1
  >>
  /AllowPSXObjects false
  /CheckCompliance [
    /PDFA1B:2005
  ]
  /PDFX1aCheck false
  /PDFX3Check false
  /PDFXCompliantPDFOnly true
  /PDFXNoTrimBoxError false
  /PDFXTrimBoxToMediaBoxOffset [
    0.00000
    0.00000
    0.00000
    0.00000
  ]
  /PDFXSetBleedBoxToMediaBox true
  /PDFXBleedBoxToTrimBoxOffset [
    0.00000
    0.00000
    0.00000
    0.00000
  ]
  /PDFXOutputIntentProfile (Adobe RGB 019981)
  /PDFXOutputConditionIdentifier ()
  /PDFXOutputCondition ()
  /PDFXRegistryName ()
  /PDFXTrapped /False

  /CreateJDFFile false
>> setdistillerparams
<<
  /HWResolution [600 600]
  /PageSize [697.080 1128.960]
>> setpagedevice

PostScript 无法处理每个分量 16 位,它只能处理 1、2、4、8 和 12。

PDF 不支持 12 BPC,仅支持 1、2、4、8 和 16。

因此,如果您使用 PostScript 作为中间格式,则无法获得超过 12 BPC 的 PDF 文件。即使 PDF 文件 它的 16 BPC,实际数据也将限制为 12(16BPC 原始 -> 12 BPC PostScript -> 16 BPC PDF)

现在更进一步,您说您正在创建一个 PDF/A 文件及其 PDF/A-1。如果你阅读 PDF/A-1 规范,你会发现它仅限于 PDF 1.4,查看 PDF 参考手册,我们发现 PDF 1.5

中引入了 16 个 BPC 图像

因此,即使 pdfwrite 能够将 12 BPC 图像升级为 16 BPC 图像(带填充),如果您想创建 PDF/A-1 文件,也不允许这样做,因为那是规范不允许。所以恐怕你不能为所欲为,你不能使用 any 工具创建一个合法的 PDF/A-1 文件,其中包含 16 个 BPC 图像。

关于下采样,彩色图像下采样的默认值为 'false',因此如果您不启用它 (DownsampleColorImages=true),则 pdfwrite 设备将不会对图像进行下采样。