例如,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);
DPI是指每英寸点(像素)。以英寸为单位的物理尺寸是主观的,基于当前显示器的尺寸和分辨率。除非你依赖于元数据(gif和bmp不包含),否则你无法可靠地计算出这个值。
Photoshop只是有一个规定的DPI值,它在翻译打印图像时使用。此值存储在PSD文件中,可以复制到JPEG元数据中,但如果以没有DPI元数据的格式保存图像,则不存储该信息。
更新:
代码得到不同值的原因是c#从计算机上当前的DPI设置中获取VerticalResolution
和HorizontalResolution
值。Photoshop的DPI是用于打印的,所以如果你想把你的图像发送到打印机,它知道物理尺寸。它的默认值为72dpi,但您可以更改它。但是,这个值在屏幕上没有意义,因为屏幕只处理像素。
DPI是指每英寸点数。位图图像没有固有的DPI,它只有一个大小,即水平方向的像素数和垂直方向的像素数(宽度和高度)。只有当您指定要在每英寸中挤入多少像素时,图像才能获得分辨率(以DPI为单位)。
因此,如果我有一张100像素宽100像素高(100px × 100px)的图像,如果我打印它(或将其转换为指定打印尺寸的格式),它将是100 DPI,以便它正好适合一平方英寸(1"× 1")。如果我把它打印成2英寸乘2英寸的正方形,它将是50 DPI, &c.