繁体   English   中英

确定上传图像的分辨率(DPI)

[英]Determining resolution (DPI) of an uploaded image

我有一个用于上传图片文件的组件。

但是,我还希望能够检查DPI设置,因为这些图像最终将被打印并提交到纸上。

在ASP.net中,我通常可以执行以下操作:

using (var rawBitmap = new Bitmap(postedFile.InputStream)){
    var dpi = (decimal)rawBitmap.VerticalResolution/bitmap.Height;    
    // do other stuff.
}

但是,在Silverlight中,我无法访问相同的库来执行此操作(也就是说,这是我在Silverlight中的第一个步骤,因此,如果有办法将这些dll导入,我将全力以赴,但我无法导入实用程序包装器)。

我已经看到了有关JPEG编码/解码实用工具FJcore(imagetools也包装了这个库)的许多建议。 从理论上讲,人们将JPEG流加载到解码器中并获取信息。

我已经尝试将这种方法与FJcore结合使用,但是我从photoshop中保存的所有文件似乎都缺少指示文件星号的正确标头,这会导致解码器失败。 我还使用他们的单元测试确认了此问题。

关于如何在Silverlight中从文件上传中提取图像分辨率的任何想法?

图像的DPI并不总是存储在图像上。 这通常是在扫描仪(或照相机)捕获期间另存为元数据的额外属性。 您实际上可以看到,如果使用Bitmap在C#中加载JPEG并再次保存,DPI属性将丢失并设置为默认值96。

因此,不幸的是,这并非始终可靠的选择。 我认为没有机会获得所有图像。 实际上,DPI与不是由扫描仪创建的图片无关。

尝试FJ核心组件以在Silverlight中查找图像的DPI

FileStream stream = imageFiles.OpenRead();
DecodedJpeg jpegImage = new JpegDecoder(stream).Decode();
int imageDpi = jpegImage.Image.DensityX;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM