如何在不加载完整文件的情况下检查文件是否是图像?有没有图像头读取库?

2024-01-02

edit:

抱歉,我想我的问题很模糊。我想要一种方法来检查文件是否not图像而不浪费时间加载整个图像,因为这样我就可以稍后完成其余的加载。我不想只检查文件扩展名。

该应用程序仅查看图像。通过“检查有效性”,我的意思是“检测并跳过目录中的非图像文件”。如果像素数据已损坏,我仍想将其视为图像。

我分配页码并将这些图像配对。有些图像是单个左页或右页。有些图像很宽,是左右页的“展开”。例如,pagesAt(3)和pagesAt(4)可以返回相同的std ::对图像或std ::对相同的宽图像。

有时,有奇数个“薄”图像,并且第一个图像将单独显示,类似于宽图像。一个例子是单个封面页。

不知道目录中的哪些文件是非图像意味着我无法自信地分配这些页码并将文件配对以进行显示。此外,用户可能决定跳转到第 X 页,当我稍后发现并删除非图像文件并相应地重新分配页码时,第 X 页可能会显示为不同的图像。

original:

如果重要的话,我正在使用 Qt 库中的 c++ 和 QImage。

我正在迭代一个目录并在图像的路径上使用 QImage 构造函数。当然,这非常慢并且使应用程序感觉没有响应。但是,它确实允许我检测无效的图像文件并尽早忽略它们。

我可以在浏览目录时仅保存图像的路径,并仅在需要时才实际加载它们,但随后我不知道图像是否无效。

我正在考虑将这两者结合起来。即,在遍历目录时,仅读取图像的标题以检查有效性,然后在需要时加载图像数据。

So,

仅加载图像标题会比加载整个图像快得多吗?或者做一些 i/o 来读取标题意味着我最好完成完整加载图像?稍后,我还将解压缩档案中的图像,因此这也适用于仅解压缩标头与解压缩整个文件。

另外,我不知道如何加载/读取just图像标题。是否有一个库只能读取图像的标题?否则,我必须将每个文件作为流打开,并自行为所有文件类型编写图像标题读取器。


Unixfile工具(几乎一直存在)就是这样做的。它是一个简单的工具,使用已知文件头和二进制签名的数据库来识别文件的类型(并可能提取一些简单的信息)。

该数据库是一个简单的文本文件(为了提高效率而进行编译),它使用简单的结构化格式(记录在man magic)。源码在/usr/share/file/magic(在Ubuntu中)。例如,PNG 文件格式的条目如下所示:

0       string          \x89PNG\x0d\x0a\x1a\x0a         PNG image
!:mime  image/png
>16     belong          x               \b, %ld x
>20     belong          x               %ld,
>24     byte            x               %d-bit
>25     byte            0               grayscale,
>25     byte            2               \b/color RGB,
>25     byte            3               colormap,
>25     byte            4               gray+alpha,
>25     byte            6               \b/color RGBA,
>28     byte            0               non-interlaced
>28     byte            1               interlaced

您可以仅提取图像文件类型的签名,并构建您自己的“嗅探器”,甚至使用来自file工具(似乎是 BSD 许可的)。

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

如何在不加载完整文件的情况下检查文件是否是图像?有没有图像头读取库? 的相关文章

  • 使用 Enumerable.OfType() 或 LINQ 查找特定类型的所有子控件

    Existed MyControl1 Controls OfType
  • 我如何在 C# .NET(win7 手机)中使用“DataContractJsonSerializer”读入“嵌套”Json 文件?

    我有一个问题 如果我的 json 文件看起来像这样 Numbers 45387 Words 空间桶 我可以很好地阅读它 但是如果它看起来像这样 Main Numbers 45387 Words 空间桶 某事 数字 12345 单词 克兰斯基
  • 读取 C# 中的默认应用程序设置

    我的自定义网格控件有许多应用程序设置 在用户范围内 其中大部分是颜色设置 我有一个表单 用户可以在其中自定义这些颜色 并且我想添加一个用于恢复默认颜色设置的按钮 如何读取默认设置 例如 我有一个名为的用户设置CellBackgroundCo
  • 如何在 SqlDataReader.Read() 期间从死锁异常中恢复

    我的 NET 应用程序的事件日志显示 它在从 Sql Server 读取数据时偶尔会出现死锁 这种情况通常非常罕见 因为我们已经优化了查询以避免死锁 但有时仍然会发生 过去 我们在调用ExecuteReader函数在我们的SqlComman
  • 指向特征矩阵的指针数组

    我在代码中使用 Eigen 的 MatrixXd 矩阵 在某个时刻我需要一个 3D 矩阵 由于 Eigen 没有三维矩阵类型 因为它仅针对线性代数进行了优化 因此我创建了一个 MatrixXd 类型的指针数组 Eigen MatrixXd
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • Oracle Blob 在 PHP 页面中作为 img src

    我有一个网站当前使用文件服务器上的图像 这些图像显示在页面上 用户可以根据需要拖放每个图像 这是使用 jQuery 完成的 图像包含在列表中 每张图片都非常标准 img src network path image png height 8
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • 在 EnvDTE 中调试时捕获 VS 局部变量

    是否可以使用 EnvDTE 进行 vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据 或者可以通过其他方法吗 我想创建一个自定义的本地窗口 我们可以修改它以根据需要显示一些较重的内容 而无需为高级用户牺牲原始的本地
  • 我可以让 ungetc 取消阻止阻塞的 fgetc 调用吗?

    我想在收到 SIGUSR1 后使用 ungetc 将 A 字符重新填充到标准输入中 想象一下我有充分的理由这样做 调用 foo 时 stdin 中的阻塞读取不会被收到信号时的 ungetc 调用中断 虽然我没想到它会按原样工作 但我想知道是
  • cout 和字符串连接

    我刚刚复习了我的 C 我尝试这样做 include
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • 如何在 DropDownList 中保留空格 - ASP.net MVC Razor 视图

    我在视图中通过以下方式绑定我的模型 问题是我的项目文本是格式化文本 单词之间有空格 如下所示 123 First 234 00 123 AnotherItem 234 00 123 Second 234 00 我想保留此项目文本中的空格 即
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 从powershell执行单向wcf服务操作

    我有一个计划任务 每小时执行一个 powershell 脚本 powershell 脚本必须调用单向 WCF 服务操作 本质上它只需要开始一项操作 我的问题是我该怎么做 我认为仅执行 url 实际上就会启动请求 但显然这是不正确的 这是我试
  • 对数组 C 进行部分排序

    我有一个如下所示的数组 int array 4 53 3 65 7 43 9 54 0 72 0 0 我只是想知道我可以使用什么方法对该数组进行部分排序 以将前三个最大的双精度数放在前面 我正在寻找最有效的方法来获取该数组中前三个最高的数字
  • 我可以在源服务器和 cloudflare 服务器之间使用 HTTP/2 吗?(Apache)

    我尝试这样做 但是当我绕过我的域 A 记录时 协议 h2 正在工作 浏览器和 apache 日志中一切正确 当我在域上打开 cloudflare 时 浏览器工作正常 我知道 CF 正在与客户端使用 HTTP2 协议 但我在 apache 日
  • 当多个线程循环运行时索引如何受到影响

    我试图编写一个运行 5 个线程并相应地打印其索引的程序 下面是代码 include
  • Github API:如何获取以给定语言编写的所有存储库

    我能够使用 JSON 格式的 v2 获取用给定语言标记的所有 github 存储库github API http developer github com v3 但是这个版本已被弃用 https github com blog 1160 g
  • PHP/MySQL 时间戳和时区

    如果我使用 MySQL 中的 NOW 函数获取当前时间戳 我可以通过 php 获取该字段并给出不同时区的时间吗 基本上将当前时区的当前时间转换为另一个时区 您可以使用DateTimeZone http www php net manual
  • 从 ctypes Windll 获取错误消息

    我正在尝试使用 Python 脚本来更改 Windows 7 计算机上的壁纸 如果重要的话 我会从 node webkit 应用程序调用脚本 缩短的脚本如下所示 result ctypes windll user32 SystemParam
  • 使用 R 中的 xlsx 包更新 Excel 电子表格数据

    我有一个与 R 中的 xlsx 包相关的查询 我知道如何使用包中的大部分函数 并且到目前为止还没有遇到任何问题 我将首先显示我的代码 然后提出我的问题 Code Section1 library xlsx data1 lt iris dat
  • 重复条目:com/google/android/gms/internal/zzqv.class Android Studio

    在我的项目中 我已经实现了游戏服务游戏 首先我尝试添加 compile com google android gms play services 10 0 1 但我遇到了一些麻烦 我找到的解决方案是仅编译所需的库compile com go
  • Wi-Fi Direct 和 iOS 支持

    我想用Wi Fi Direct在解决方案中 但我不确定哪些平台支持它 Does Wi Fi Direct取决于 iPhone iOS 版本 我可以开发一个应用程序吗Wi Fi Direct运行 iOS 8 的 iPhone 4s 上的功能
  • Javascript 中捕获表单提交的事件是什么?

    这里有几个问题 我想知道我应该使用什么事件在表单提交时执行一些 Javascript 以进行一些验证 完成验证后 如何使用 Javascript 提交表单 假设您有一个名为myForm var form document getElemen
  • 如何计算行的平均值,同时排除数据框中行的零值

    我正在尝试计算数据框中每一行的平均值 每行都有零 我想从计算中排除这些 我不想删除整行 而只想删除零并计算每行中剩余值的平均值 如果行的值全部为零 则结果应为零 怎么样 nzmean lt function x if all x 0 0 e
  • 我可以在 中使用占位符吗

    我可以使用占位符吗
  • 无法查看 s3 上传的图像文件

    我正在使用 s3 上传图像文件 但每当我尝试使用 URL 以及从 s3 控制台下载时 都会下载图像文件 但是 图像查看器将看不到它 它只是显示不兼容的文件类型 myS3Function uploadFile request body fil
  • .lib 和 .dll 向后兼容性

    我目前有一个 VS6 非托管 C 库 以 lib 或 dll 形式提供 我想升级到 VS2010 但仍有 VS6 VS2005 和 VS2008 中的用户 VS2010 中内置的 lib 或 dll 可以在 VS6 VS2005 或 VS2
  • sequelize.query() 返回相同的结果两次

    我正在使用nodejs项目工作sequelize用于连接mysql数据库 我也在使用续集值 https www npmjs com package sequelize values用于从 Sequelize 实例获取原始数据 我写了下面的代
  • Rails 中 Postgresql 的准备语句

    现在我正在从 SQLite 迁移到 Postgresql 的过程中 遇到了这个问题 以下准备好的语句适用于 SQLite id 5 st ActiveRecord Base connection raw connection prepare
  • Glimpse 是否适用于返回 JsonResult 的操作?

    我有一个应用程序 其中大部分繁重工作都在每个返回 JsonResult 的操作中 它们是由 jQuery 从简单的视图中调用的 这些请求显示在 Glimpse 的 Ajax 选项卡中 但当每个请求完成时 它都会被评分并显示为灰色 我想检查每
  • Recyclerview不调用任何Adapter方法:onCreateViewHolder,onBindViewHolder,

    我的RecyclerView没有调用onCreateViewHolder onBindViewHolder 因此 recyclerview中不会出现任何东西 我放了日志进行调试 没有显示任何日志 可以是什么 我的适配器 public cla
  • 如何在不加载完整文件的情况下检查文件是否是图像?有没有图像头读取库?

    edit 抱歉 我想我的问题很模糊 我想要一种方法来检查文件是否not图像而不浪费时间加载整个图像 因为这样我就可以稍后完成其余的加载 我不想只检查文件扩展名 该应用程序仅查看图像 通过 检查有效性 我的意思是 检测并跳过目录中的非图像文件