C#和Photoshop之间图像分辨率(ppi)的差异

3
例如,C# 表示所选图像包含 96 ppi,而在 Photoshop 中的同一图像只有 72 ppi。 为什么会有这样的差异? 我倾向于相信 Photoshop,在这种情况下如何测试图像分辨率,如果 C# 返回错误结果?
我们需要构建某种验证器控件,拒绝所有 ppi != 300 的图像。
控件应支持以下格式:jpg、jpeg、gif、png、bmp。
以下是代码:
Image i = Image.FromFile(FileName);

Console.Write(i.VerticalResolution);
Console.Write(i.HorizontalResolution);

2
我想知道C#怎么能“说”出那样的话..你能给我们展示一些代码吗?你使用第三方组件吗?是什么? - Shai
主帖已编辑,现在包含相关的源代码。 - Prosinac Decembar
1
你说的不是DPI,而是分辨率。 - Shai
我的错误。抱歉。但是无论如何,还是有区别的。在Photoshop中,有一个“分辨率”字段,指定以像素/英寸(PPI)为单位的值。Image.HorizontalResolution属性-水平分辨率,以每英寸像素数(PPI)为单位。 - Prosinac Decembar
@Shai - 来自 MSDN: "获取此图像的垂直分辨率,以每英寸像素数为单位。" - Polynomial
显示剩余2条评论
2个回答

7
DPI指的是每英寸的点(像素)数。在英寸上的物理大小是主观的,基于当前显示器的大小和分辨率。除非您依靠元数据(GIF和BMP不包含元数据),否则您无法可靠地计算它。
Photoshop只是为打印而设定了DPI值。这个值存储在PSD文件中,可以复制到JPEG元数据中,但如果您将图像保存为没有DPI元数据的格式,则信息不会被存储。
更新:您的代码得到不同的值是因为C#从计算机的当前DPI设置中获取其“VerticalResolution”和“HorizontalResolution”的值。 Photoshop 的 DPI 用于打印,所以它知道如果您想要将图像发送到打印机,它的物理尺寸是多少。它的默认值为72dpi,但您可以更改它。然而,在屏幕上,这个值没有意义,因为屏幕只处理像素。

是的,不过 DPI != PPI。 许多人虽然将“每英寸点数”(Dots Per Inch)和“每英寸像素数”(Pixels Per Inch)用作同义词,但它们并不相同。 - Paolo Moretti
DPI与PPI并不直接对应,因为打印机可能会放置多个点来复制一个像素。基本上,DPI一词是指打印设备的分辨率,而PPI是指图像本身的分辨率。 - Paolo Moretti
@PaulRuane - 显示器并没有以任何有意义的方式向操作系统报告它们的物理尺寸。 - Polynomial
@PaoloMoretti - 这是正确的。然而,在Photoshop中,DPI在屏幕上直接转换为PPI,在打印机上则是DPI。 - Polynomial
@Polynomial - 我能得出结论,VerticalResolution和HorizontalResolution是无用的,因为它们取决于运行程序的计算机,并且不能给出实际的图像分辨率(即,在不同的计算机上,将返回不同的结果)吗?如果C#的结果与Photoshop的结果不同步,那对我来说就毫无意义了。 - Prosinac Decembar
显示剩余2条评论

1

DPI 意思是每英寸点数。位图图像没有固有的 DPI,它仅仅有一个大小,即水平方向和垂直方向上的像素数(宽度和高度)。只有当你说出要将多少像素挤入每英寸时,图像才会获得分辨率(以 DPI 为单位)。

因此,如果我有一张宽度和高度均为 100 像素(100px × 100px)的图像,如果我打印它(或将其转换为规定打印尺寸的格式),使其恰好适合一个正方形英寸(1" × 1"),则它将是 100 DPI。如果我将其打印成适合一个二英寸乘二英寸的正方形,则它将是 50 DPI,依此类推。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接