web - 确定图像文件是照片还是图形?

标签 web imagemagick gd photo graphic

我正在着手进行我认为可能有点像实验的事情......

提出(或发现,因为它可能已经存在)一种方法来确定给定图像文件(无论格式如何)是照片还是图形。

“照片”的意思是风景、人物等。 “图形”表示图标、插图、图表、UI 屏幕截图等。

在过去的一周里,我想出了一个很好的 PHP/ImageMagick 脚本,它从图像文件中提取统计数据,并很好地修复了白平衡、色调、鲜艳度、清晰度、阴影/高光。

现在我想更进一步:自动检测照片内容,然后应用上述处理。

到目前为止,一种比较一致的方法是确定图像是否具有 EXIF 数据,但这仅适用于 JPEG。当然,这并不是万无一失的。

是否有通过 ImageMagick、GD 或其他方式检测“照片”与“图形”的已知方法?

如果需要,我确实有能力在我们的 Web 服务器上安装/运行除 ImageMagick 和 GD 之外的应用程序。

谢谢!

最佳答案

照片中往往有很多不同的颜色(数千、万和十万)。其他图形倾向于使用有限数量的独特颜色(几十到几百)。

因此 ImageMagick 命令可能能够帮助对大量文件进行分类:

 identify -format '%k\n'        file
 identify -format '%f :  %k\n'  file1 file2 file3 file4

特价%k即时通讯 identify percent escape 宏会计算并返回 identify 中的唯一颜色数量。 ed 文件。以下是我自己的本地文件的一些示例:

 identify -format '%k' logo.png
    257

 identify -format '%k' testimage.png 
  20913

针对 15 个 4032x3024 的集合运行它本地目录中 - 大小的照片产生了以下结果(每张照片需要 2 秒以上的时间来计算颜色):

time identify -format '%f :  %k\n' *.JPG
  P4061782.JPG :  285127
  P4061783.JPG :  304247
  P4061784.JPG :  230241
  P4061785.JPG :  277545
  P4061786.JPG :  300632
  P4061787.JPG :  325916
  P4061788.JPG :  301766
  P4061789.JPG :  300821
  P4061790.JPG :  265080
  P4061791.JPG :  348247
  P4101941.JPG :  323714
  P4101942.JPG :  359688
  P4101943.JPG :  338563
  P4101944.JPG :  308578
  P4101945.JPG :  291853

   real  0m34.257s
   user  0m33.301s
   sys   0m0.678s

警告:使用矢量绘图应用程序(例如 inkscape)生成的复杂渐变也可能会产生许多独特的颜色...

关于web - 确定图像文件是照片还是图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25026132/

相关文章:

php - 向图像添加文本后如何保存图像

java - 签署小程序并在内网部署

ruby-on-rails - 带回形针的水印图像,rails 4

ubuntu - 如何在 Ubuntu 上叠加 2 个二进制图像以保存白色?

PHP:如何检测 jpeg 是否全黑(无图像)?

perl - 使用 Apache 和 mod_perl 提供动态生成图像的正确方法是什么?

css - 手机版元素主题Concrete5 v 5.7

javascript - 如何使用 javascript 和 html 突出显示文本并在运行时对其进行标记

javascript - 我需要在网页上访问我们获得的右键单击选项?

imagemagick - 是否可以修剪图像并强制其尺寸与 ImageMagick 一致?