ImageMagick 似乎最适合在命令行上转换图像文件。但是,它仅支持更改以像素为单位的大小和以每像素英寸为单位的分辨率,但不支持更改打印尺寸(如命令 identify -verbose
所示)。我想:
- 快速获取以毫米为单位的图像打印尺寸
- 更改图像打印尺寸(通过将高度或宽度或两者都设置为以毫米为单位的新值)
这应该可以通过简单的 shell 脚本编写,不是吗?
最佳答案
图像的唯一绝对尺寸是像素。
分辨率、mm 或密度 或分辨率 只在您渲染 某个表面上的图像(屏幕显示、纸质打印输出)。
它们有自己内置的、依赖于硬件的分辨率。如果您知道,您可以计算图像尺寸的 mm 值,前提是您要以“自然大小”渲染它。
很多时候您不想要“自然尺寸”——有时您可能想要:“用图像填充 Letter 尺寸的纸张”(缩放以适合)。如果发生这种情况,则必须放大或缩小相同的图像——但屏幕或打印机分辨率不会改变,只是插值算法将开始添加像素以填充间隙(放大)或删除像素以使图片显得更小(缩小)。
因此,在有人给出有关如何计算“以毫米为单位的图像尺寸”(以图像的自然尺寸表示)的算法之前,您需要知道目标设备(屏幕或打印机)的分辨率。
编辑:
如果您将给定图像(其大小以像素为单位)嵌入 PDF(其中源文档来自例如 LaTeX),您仍然必须指定...
- ...您希望图像以何种分辨率呈现在页面上
- ...或者您希望以何种尺寸(以毫米为单位或以页面尺寸的百分比为单位)呈现图像。
如果不对图像重新采样,您无法同时确定两个这些参数。选择一个,另一个由您的选择隐式决定。
举个例子。
假设您的原始图片为 2160x1440 像素。
您的 LaTeX -> PDF 转换由 Ghostscript 完成。 Ghostscript 在内部对所有光栅对象使用 720 dpi 的默认分辨率。因此,除非您为 PDF 转换明确地将“分辨率”设置为不同的值,否则图像在 PDF 或打印页面上的大小将为 3x2 英寸(76.2 x 50.8 毫米)。
如果将分辨率设置为 90 dpi,则图像在页面上的大小为 24x16 英寸(609.6 x 406.4 毫米)。
如果您将分辨率设置为 270 dpi(接近常用的 300 dpi),图像尺寸将变为 8x5.333 英寸(203.2 x 135.5 毫米)。
所以 shell 脚本的公式是:
# 25.4 mm == 1 inch
image_width_px=W # in pixels (integer)
image_height_px=H # in pixels (integer)
resolution=R # in pixels/inch
image_width_in_inch=$((W / R)) # Shell arithmetics: does only handle
image_height_in_inch=$((H / R)) #+ and return integers!
image_width_in_mm=$(( $((W / R)) * 254/10 ))
image_height_in_mm=$(( $((H / R)) * 254/10 ))
# use 'bc' to achieve higher precision arithmetics:
precise_image_width_in_mm=$( echo \
"$image_width_px / $resolution * 25.4" \
| bc -l )
precise_image_height_in_mm=$( echo \
"$image_height_px / $resolution * 25.4" \
| bc -l )
关于shell - 如何在命令行上以毫米为单位更改图像的打印尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11773688/