如何使用其内容识别图像文件格式?

2024-04-11

如果图像文件的格式为.png那么它将包含‰PNG,位于文件的开头。 (当读入Text mode)

如果图像文件的格式为.bmp那么它将包含BM,位于文件的开头。 (当读入Text mode)

我知道图像格式在文件开头包含一定大小(字节)的文本(数据),这些文本(数据)用作图像文件的元数据?

我的问题是:-

  • 所有图像文件格式(或一般格式)中的这种行为是否相同?
  • 可以是图像文件(没有扩展名的)仅使用此数据即可被识别?

  • 是否有关于如何分解此元数据的信息?我的意思是,元数据中哪个位置的数据有什么意义?


所有图像文件格式(或以下格式)中的此行为是否相同 一般的)?

对于大多数人来说,是的。有些专有格式(例如游戏)可能具有非常短的元数据或没有元数据。此外,元数据可能位于另一个文件中(例如动画与 XML 元数据)。

仅使用此可以识别图像文件(无扩展名) 数据?

是的。事实上,如果图像文件的扩展名不正确,大多数图像查看器都会向您发出警告,并询问您是否应该修复它。

在 Unix 系统上,有一个file command https://en.wikipedia.org/wiki/File_(command)根据文件的元数据识别文件。有一个更好的专门用于图像的工具,称为识别(ImageMagick 的一部分) https://imagemagick.org/script/identify.php返回有关分辨率、位深度等的更详细信息。

是否有关于如何分解此元数据的信息?经过 我的意思是,元数据中哪个位置的数据有什么意义?

有一些关于(图像)文件格式的书籍,对于大多数格式,此信息可在官方规范中找到(例如RFC 2083 https://www.rfc-editor.org/rfc/rfc2083对于巴布亚新几内亚)。它们列出了所有(可选)文件内容,描述了压缩以及查看器/解码器/编码器可以/必须/应该对数据执行的操作。一个好的起点可能是维基百科图像文件格式列表 https://en.wikipedia.org/wiki/Image_file_formats.

请注意,根据您提供的示例,我认为您使用文本编辑器打开文件,这不是该任务的理想工具。最好使用十六进制编辑器 https://en.wikipedia.org/wiki/Hex_editor为了这。默认情况下,文本编辑器不会显示大多数字节(例如 255)并解释其他字节(例如制表符或换行符)。它们可能足以看到像“BM”和“PNG”这样的魔术文本字符串,但是使用十六进制编辑器,您可以看到这些文本部分及其数字表示 - 例如允许您提取图像的宽度和高度。为此,需要一些工具来转换十六进制 https://en.wikipedia.org/wiki/Hexadecimal将值转为十进制很有用,大多数计算器都可以做到这一点。

作为示例,让我们在文本编辑器和十六进制编辑器中查看分辨率为 6146 x 14293 的 PNG 文件的开头:

您可以看到文件都是 PNG 图像,这是正确的。但十六进制编辑器视图中标记的部分将显示图像的宽度和高度(与“IHDR”部分的 PNG 块规范 https://www.rfc-editor.org/rfc/rfc2083#section-4) - 0x00001802十进制为 6146,0x000037D5是 14293。在文本编辑器中无法执行此操作。

另请注意,即使您不知道图像格式,您也可能会幸运地猜测它是未压缩的数据(这通常适用于某些游戏图像文件格式,最著名的是 Unity 的“资产”)。例如。如果将文件重命名为“.raw”,图像查看器伊凡维尤 https://www.irfanview.net/将会出现一个对话框(请参见下面的屏幕截图),您可以在其中猜测图像的宽度、高度和位深度,并查看结果是否良好。不过,这需要一些解释结果的经验,如果宽度和位深度不匹配,图像将看起来像噪声、扭曲或颜色错误。

这种“图像几何猜测”可以通过尝试不同的宽度并计算两条线之间的相关系数来改进/自动化。工具raw2tiff http://www.libtiff.org/man/raw2tiff.1.html可以做到这一点。引用自该网站:

没有什么魔法,只是一个数理统计,所以可以 在某些情况下是错误的。但对于大多数普通图像,猜测方法会 工作正常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用其内容识别图像文件格式? 的相关文章

  • 在 Android 应用程序中编辑/添加 IPTC 元数据

    我看过许多其他类似的问题 但似乎没有一个有准确的答案 我正在开发一个可处理大量图像的 Android 应用程序 我希望通过编辑 IPTC 关键字标签 或其他适当标签 的值来向图像添加信息 我在用元数据提取器 http drewnoakes
  • WPF 图片库

    我将驱动一个需要向用户呈现图像组的触摸屏应用程序 不是网络应用程序 我们的愿望是呈现具有页面前进 后退功能的 3x3 图像网格 他们可以选择一些 我将只展示这些图像 我没看到ListView完全符合我的要求 尽管 WPF 足够大 我很可能错
  • opencv createsamples没有错误,但是没有找到样本

    我在用着this http coding robin de 2013 07 22 train your own opencv haar classifier html教程 我正在根据我的正面图像创建大量样本 我正在使用 Windows 这是
  • 在 WPF 中显示 Drawing.Image

    我有一个 System Drawing Image 的实例 如何在我的 WPF 应用程序中显示这一点 我尝试过img Source但这不起作用 我有同样的问题并通过结合多个答案来解决它 System Drawing Bitmap bmp I
  • 请推荐一个用于将 IPTC 数据写入图像的 Node 模块?

    我有一个 Node js 服务器 其工作是下载 JPEG 图像 将某些数据写入几个 IPTC 字段 例如Iptc Application2 Caption 并将图像传递给另一个服务 理想情况下 我想将 IPTC 数据写入内存缓冲区 而不将图
  • 将图像文件存储在猫鼬模式的二进制数据中并以html形式显示图像

    我正在使用 Express Node js 和 Mongodb 创建上传和显示图像文件的网页 我使用 schema 将图像的二进制文件保存在 mongodb 中 这是我在index js和db js中的一点代码 var Post mongo
  • 用Python识别图像

    我对 OCR 识别和 Python 都有点陌生 我想要实现的是从 Python 脚本运行 Tesseract 以 识别 tif 中的某些特定数字 我以为我可以为 Tesseract 做一些培训 但我在 Google 和 SO 上没有找到任何
  • CSS - 将文本保留在图像下方

    我正在尝试创建一个简单的图片库 有人告诉我使用 float left 但是当我这样做时 页脚中的所有文本都会射到第一张图像 我已经搜索了大约一个小时试图找到解决方案 但我找不到任何东西 我尝试过使用边距 边框 不同的对齐方式和各种不同的小东
  • Nodejs Base64 中的读取文件

    我正在尝试从客户端读取以 base64 编码的图像 如何使用nodejs进行阅读 My code add to buffer base64 image var encondedImage new Buffer image name base
  • 使用 matplotlib 从 TeX 创建数学表达式的图像

    使用 python 库 matplotlib 我发现了这个问题的解决方案 在 PyQt 中 很好地 显示代数表达式 https stackoverflow com questions 14097463 displaying nicely a
  • CSS 比例和方形中心裁剪图像

    所以我的应用程序中有一个缩略图集合 其大小为200x200 有时原始图像没有这个比例 所以我计划将此图像裁剪为正方形 目前它只是拉伸图像以适合缩略图 所以说我的原始图像大小是400x800 那么图像看起来就很压扁 我想裁剪此图像 以便它查看
  • 如何修复此 YCrCb -> RBG 转换公式?

    我使用的公式来自这个问题 https stackoverflow com questions 8838481 kcvpixelformattype 420ypcbcr8biplanarfullrange frame to uiimage c
  • 如何更改焦点/按下时图像按钮的色调

    我有一个ImageButton在我的应用程序中 当按钮打开时我需要更改图像的色调pressed focused 我有ImageButton设置为获取其src来自 XML 文件 如下所示
  • GKE 出现错误:ImagePullBackOff 和错误:ErrImagePull 错误

    当 kubectl 应用 yaml 将自定义构建的 docker 映像部署到 GCP 中的集群 编辑掉敏感信息 时 我收到以下错误 已尝试以下但没有运气 手动部署镜像 检查以确保防火墙规则允许 443 并且没有任何东西阻止它 尝试将容器注册
  • 图片加载性能

    我已经尝试了几个小时从文件加载图像的各种方法 请看一下这两种方法 public Image SlowLoad string path return Image FromFile path public Image FastLoad stri
  • opencv形态扩张滤波器作为最大滤波器

    就像中值滤波器的定义一样 我可以将 最大滤波器 定义为局部窗口 例如dst x y max 3x3 局部窗口像素 但我在opencv中找不到这样的过滤器 最接近的是 dilate 函数 然后我使用 dilate 函数的默认配置 但结果不正确
  • 图像未显示在从 HTML 创建的 PDF 上

    我想动态创建 PDF 这意味着我将从 Google Drive 获取文件 然后将它们放入 HTML 代码中 并尝试从中创建 PDF 一切工作正常 除了图像没有显示 我现在正在做的是 从 HTML 字符串创建 HtmlOutput 获取该 H
  • 使用 SSL 的 Xamarin.Forms Image.Source

    我正在使用一个在线商店来存储通过我们的应用程序上传的用户图像 并受 SSL 保护 上传工作一切顺利 因为我使用的是带有附加证书的 WebClient 但是当我尝试使用 Xamarin Forms Image 组件时 例如将源设置为 http
  • 在我们的 Rails3/Heroku 应用程序中设置 Paperclip + AWS S3 用于图像存储时遇到问题

    我们已经构建了一个 Rails 应用程序 它有多个用户和每个用户的图像 在我们的本地主机上完成所有开发工作 我们为用户和照片提供了工作种子 但现在我们尝试使用 S3 进行图像存储 我们在 总是在 种子 期间遇到错误执行此操作时迁移的步骤 耙
  • 在discord.py中访问成员的横幅

    我正在制作图像配置文件命令 我想为此访问会员的横幅 我们有什么办法可以在discord py 中做到这一点吗 如果不清楚我所说的横幅是什么意思 那么蓝色背景的图像就是横幅 我想访问它 在discord py v2 0中你可以使用 You m

随机推荐