如何在 ConTeXt 中考虑图像的实际尺寸并对其进行重新采样(下采样)?

如何在 ConTeXt 中考虑图像的实际尺寸并对其进行重新采样(下采样)?

我目前正在排版一本教科书,并希望实现一种机制,使我可以重新采样图像以显示相对于其最终大小的特定分辨率(主要是为了导出文档的交互式 PDF)。换句话说:例如,如果将图像放置在大小为2”,然后假设目标分辨率为300ppi,图像应该重新采样为600x600 像素,无论其原始大小或分辨率如何。

似乎有一个解决方案使用grph-downsample描述这里,但这种方法不再有效。因此,我尝试按照说明在图像转换器上构建解决方案这里。但是,这并没有像我想象的那样起作用,因为命令gm convert缺少一个参数(-density它本身不执行任何操作,它需要一个附加参数-resample- 但如果我说错了,请纠正我)。无论如何,我想出了以下内容(MWE):

\startluacode
local function downsampler(oldname, newname, resolution)
    if not resolution or resolution == "" then
        resolution = 72
    end
    os.execute(string.format(
        'gm convert -density 300 -resample %i "%s" "%s"',
        resolution, oldname, newname)
    )
end

-- Set the PNG, TIFF and JPG converters to the above function.
figures.converters.tif.pdf = downsampler
figures.converters.jpg.pdf = downsampler
figures.converters.png.pdf = downsampler
\stopluacode

% ----------

\starttext

\section{Testing resampling of images}

\placefigure[nonumber,left][]
  {An image of size 5cm should be resampled to half the size in pixels of...}
  {\externalfigure[Cute_grey_kitten.jpg][width=5cm]}

\input{knuth}

\placefigure[nonumber,left][]
  {...an image of size 10cm.}
  {\externalfigure[Cute_grey_kitten.jpg][width=10cm]}

\input{knuth}

\stoptext

如下所示(顺便说一下,图片取自这里):

在此处输入图片描述

这里的问题是,这两个数字应该重新采样为不同的像素大小:而第一次出现只是5厘米宽,这意味着图像宽度为142像素, 假设72ppi(如我的 MWE),第二个(10厘米)需要宽度284像素具有相同的有效分辨率。

因此,我需要图形的宽度在降采样函数中对图像进行重采样时,需要考虑这一点。这可能吗?

相关内容