我目前正在排版一本教科书,并希望实现一种机制,使我可以重新采样图像以显示相对于其最终大小的特定分辨率(主要是为了导出文档的交互式 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像素具有相同的有效分辨率。
因此,我需要图形的宽度在降采样函数中对图像进行重采样时,需要考虑这一点。这可能吗?