You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C# ImageSharp库读取PNG图片PPI异常问题咨询

问题解答

为什么读取到的PPI是5905?

ImageSharp的Image.Metadata.HorizontalResolution和VerticalResolution属性单位是像素每米(Pixels Per Meter),而你提到的150是像素每英寸(PPI,Pixels Per Inch)。两者转换关系为:1米=39.3701英寸,所以150 PPI × 39.3701 ≈ 5905像素/米,这就是你看到的数值。

如何读取正确的PPI?

将读取到的分辨率数值转换为像素每英寸即可,修改后的代码如下:

uploadedFileName = Path.GetFileNameWithoutExtension(files[0]);
string base64Image = files[0];
originalImageData = ConvertBase64ToByteArray(base64Image);
    
var imageData = ConvertBase64ToByteArray(base64Image);

using (var image = Image.Load(imageData)) 
{
    originalImageWidth = image.Width;
    originalImageHeight = image.Height;
            
    // 将像素每米转换为PPI(像素每英寸)
    double pixelsPerMeterToInch = 39.3701;
    var horizontalPPI = image.Metadata.HorizontalResolution / pixelsPerMeterToInch;
    var verticalPPI = image.Metadata.VerticalResolution / pixelsPerMeterToInch;

    Console.WriteLine($"Image Width: {originalImageWidth}");
    Console.WriteLine($"Image Height: {originalImageHeight}");
    Console.WriteLine($"Horizontal PPI: {Math.Round(horizontalPPI, 2)}");
    Console.WriteLine($"Vertical PPI: {Math.Round(verticalPPI, 2)}");
}

运行后会得到正确的150 PPI(浮点误差可通过Math.Round处理)。

关于DPI的读取

首先明确:数字图像本身不存在DPI,DPI(每英寸点数)是打印设备的属性,描述输出时每英寸的墨点数量。图像元数据里标注的“DPI”其实就是PPI,是给打印设备的参考值——告诉打印机每英寸应该打印多少像素。

ImageSharp读取的分辨率元数据就是这个参考值,所以用上面的转换方式得到的数值,就是常说的“图像DPI”,本质和PPI是同一个数据,只是叫法不同。


内容的提问来源于stack exchange,提问作者Mark Tait

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:13:16