“我想用Imagemagick更改DPI,而不更改图像数据的实际字节大小。”
这是完全不可能的!
因为:
more "Dots per Inch"
<==> more pixels per area
<==> more total pixels per image
<==> more total bytes per image
另外,您似乎并不了解实际的DPI是什么:
- 这是一个完全抽象的值,仅在还知道打印输出或在屏幕或监视器上呈现的绝对大小的情况下才具有实用价值:
- 您可以在1英寸宽的正方形上“打印”相同的72x72像素图像:打印输出的分辨率为
72dpi
。
- 您也可以在1/4英寸宽的正方形上“打印”它:然后,打印输出的分辨率为
288dpi
。
- (注意:如果您在
288dpi
1英寸的正方形上进行“打印” ,则不再是同一张图像:它将通过打印机驱动程序或其他某种过滤机制进行一些推断,它将变成288x288像素的图像,而不是72x72像素的图像...)
- 两种打印输出将具有完全相同的图像信息-288dpi图像不会突然具有更多图像信息。
如果要将原始72x72像素的图像打印为1英寸宽的正方形,但在288dpi
,则必须重新缩放图像(在这种情况下,将其放大)。对于原始的每1像素,您将需要4像素的新的放大图像。现在,可以使用不同的算法来计算这4个像素(其中3个为新像素)应具有的颜色值:
- 您可以为它们提供与原始像素相同的像素(这是一种非常“原始”的算法,
- 或者您可以对原始像素的颜色值与相邻像素的颜色值进行平均。
无论如何,您都将创建一个更大的图像,该图像由288行像素组成,每个像素行的高度均为288像素(288x288像素)。
当您浏览“图片->打印尺寸”时,Gimp会为您做什么:它简化了重新计算绝对像素大小所需的更改的过程,从而使其更加易于使用。以此目的...
- ...它首先询问您有关DPI的信息,因为给定的打印机无法任意更改其打印分辨率(有些打印机不仅可以提供一种,甚至可以提供2或3种不同的分辨率)。因此它会询问您要以哪种分辨率打印。那是第一个信息。
- ...那么它也要求提供第二一块信息:在该尺寸(在
cm
,mm
或inch
)打印输出应该出现在纸面上。
然后,根据这两项信息,Gimp会计算它必须使用的像素总数(从原始像素数推断出)以请求的分辨率填充请求的空间。
但是,通过使光栅图像包含更多像素来按比例放大光栅图像不会为其添加真实信息,它只会为其添加虚假的“质量”。如果您的放大算法是一种“好的”算法,那么对人眼来说可能看起来更好。如果您像现有一些简单的算法一样,将现有像素增加一倍,三倍或四倍,这将很难看。
对于光栅图像,
DPI设置仅在打印或显示时才相关。因为打印机或监视器已给定固定的分辨率。因此,只有...的信息
- ...打印机驱动程序或
- ...支持打印的图像处理应用程序
需要知道。
而ImageMagick的文档与我完全同意:
-density width
-density widthxheight
设置图像的水平和垂直分辨率,以 渲染到设备。
对于矢量图像或文件格式
(例如PDF或PostScript),DPI设置在光栅化它们的上下文中非常重要。更高的DPI将把更多的图片信息转换成栅格格式,从而从真实的原始质量中保留更多的细节。当转换在给定大小的矢量图像mm
,cm
或inch
为具有更高DPI光栅将直接转化为一个较大的数字图像中的总像素。
同样,ImageMagick不支持“打印”。相反,仅ImageMagick ...
- ...将文件从给定的栅格格式转换为其他栅格格式;
- ...或者按比例缩小或按比例放大光栅图像;
- ...或根据特定算法更改颜色值;
- ...或者裁剪图像,叠加图像,反转图像,镜像图像;
- ...还有什么...
...但是要打印处理后的图像,您需要使用其他程序。
某些图像格式(TIFF,PNG等)确实支持在其元数据中内部存储DPI设置。
但这不过是一个“提示”属性,不会改变基础栅格图像。这就是您做出此发现的原因:
“当我检查文件时,它保持不变。”
打印机驱动程序或页面创建程序(例如LaTeX)可能会自动评估此“提示”。在没有这种DPI“提示”的情况下(或者如果它们不以LaTeX期望的方式展现自己),仍然应该能够命令LaTeX在页面上呈现任何给定的图像,就像人们期望的那样只需在图像周围添加一些更明确的LaTeX代码!
其他一些图像格式(JPEG(?),BMP等)甚至不支持在其内部元数据中存储DPI提示。
因此,Gimp只支持您看到的“图片->打印尺寸”功能,因为它要打印图像。使用ImageMagick无法打印。
打印时继续使用Gimp做您想做的事情。使用ImageMagick没有意义。
另请参阅此附加的IM文档片段,该片段用不同的词解释了相同的主题。
所以剩下的是:
- 如果您使用Gimp“操作”图像,然后将结果嵌入LaTeX,则页面看起来像您期望的那样。
- 如果您使用ImageMagick“操作”您的图像,然后将结果嵌入LaTeX,则该页面看起来不符合您的期望。
请提供以下内容以解决上述问题:
- 您的ImageMagick安装的确切版本(的完整输出
convert -version
和convert -list configure
);
- (指向原始样本图像的链接);
- (链接)由Gimp处理的同一张图片;
- (指向的链接)由ImageMagick处理的同一图像。
这样我们可以帮助解决问题。
但是请注意:这与您当前的主题/标题要求的问题不同:“我想使用Imagemagick更改DPI,而不更改图像数据的实际字节大小”
更新资料
由于某些读者仍然不清楚我上面提到的内容,因此这里还有另一种尝试...
图像文件中被称为“分辨率”或“密度”的是元数据属性。它对文件描述的实际像素数没有影响,并且在这方面是完全不相关的。这只是打印,渲染或显示图像时打印或渲染设备或应用程序可能遵循或可能不遵循的提示。
为此,图像文件中仅存储了一些数字。这些数字告诉打印机等输出设备,并显示每英寸应显示多少点(或像素)。对于PostScript,PDF,MWF和SVG等矢量格式,它告诉像素比例绘制图像使用的任何实际坐标。
一个示例是Adobe Photoshop,其中应用程序不遵守ImageMagick在图像元数据中标注的分辨率值。Photoshop将有关所需打印或显示分辨率的提示存储在名为8bim的专有配置文件中。即使要求将分辨率更改写入图像文件的元数据中,ImageMagick也不会触摸此配置文件。另一方面,一旦看到自己的8bim配置文件,Photoshop将忽略ImageMagick存储在为此目的定义的标准元数据字段中的所有分辨率提示。
OP应该选择了以下标题:
- “我想用ImageMagick更改DPI(元数据分辨率提示),而不更改图像中的实际像素数”
为了避免一切误会...
^
他的答案左侧的小图标),而不仅仅是在拥有足够个人声誉后立即“接受”(我认为您需要+15)...