首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于打印目录中像素大小的图像的命令

用于打印目录中像素大小的图像的命令
EN

Stack Overflow用户
提问于 2021-09-17 19:36:18
回答 3查看 75关注 0票数 1

是否可以列出目录中像素大小大于或小于x的所有图像?我在另一个线程上找到了这个命令

代码语言:javascript
运行
复制
find . -name '*.png' -exec file {} \; | sed 's/\(.*png\): .* \([0-9]* x [0-9]*\).*/\2 \1/' | awk 'int($1) < 250 {print}'

这个命令在*.png上运行得很好,但是当我把它改为*.jpg的时候,结果就变得太疯狂了。见下文。我想将结果写入日志文件,以便以后从我的产品目录中删除这些图像。

*.png输出

代码语言:javascript
运行
复制
50 x 50 ./data/catalog/agsquare.png
220 x 138 ./data/catalog/brickwall_@2X.png
3 x 3 ./data/catalog/dots.png
98 x 98 ./data/catalog/grid-noise.png

*jpg输出(忽略像素大小,此命令明显有问题)

代码语言:javascript
运行
复制
./data/background/fashion-shirt.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 1920x1440, frames 3
./data/background/grey-bag.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 1920x1280, frames 3

操作系统: Ubuntu 18.04.5 LTS

EN

回答 3

Stack Overflow用户

发布于 2021-09-17 20:14:14

对于PNG,file输出1 x 2,但对于JPEG,输出1x2。您的命令需要空格。

取而代之的是,使用ImageMagick的identify这样的工具,它可以以独立于格式的方式完成此任务:

代码语言:javascript
运行
复制
find . \( -name '*.jpg' -o -name '*.png' \) \
    -exec identify -format '%w %h %i\n' {} + |
    awk '$1 < 250'
票数 3
EN

Stack Overflow用户

发布于 2021-09-17 20:51:41

按照从最简单到更重的顺序,您有以下几个选项:

  • feh
  • exiftool
  • ffprobe - ffmpeg
  • ImageMagick identify

的小朋友

根据Ubuntu package repository,您应该在Ubuntu18LTS中安装feh,这样您就可以使用:

代码语言:javascript
运行
复制
feh -L "%f:%w:%h"  *.jpg *.png

示例输出

代码语言:javascript
运行
复制
small.png:10:10
red.jpg:8:8
redhat.jpg:254:255

feh还接受—min-dimension—max-dimension作为过滤器。因此,对于宽度大于640像素的所有图像,请使用:

代码语言:javascript
运行
复制
feh --min-dimension 640x0 -L "%f:%w:%h"  *.jpg *.png

您还可以使用exiftool查找和打印高度或宽度小于100 px的图像,如下所示:

代码语言:javascript
运行
复制
exiftool -p '$filename:$imagewidth:$imageheight' -if '$imagesize and ($imagewidth<100 or $imageheight<100)' -q *.jpg *.png

示例输出

代码语言:javascript
运行
复制
black.jpg:8:8
red.jpg:8:8
small.png:10:10

如果您使用的是源自Redmond的任何“操作系统”,请将单引号替换为双引号。

请注意,与ImageMagick.相比,exiftool是一个小得多的安装

Ubuntu 18 LTS还应该包含ffmpeg和它的小伙伴ffprobe,所以您可以这样做:

代码语言:javascript
运行
复制
ffprobe -v error -select_streams v -show_entries stream=width,height  -of csv=p=0:s=x IMAGEFILE

或者在ImageMagick,中使用width<100查找图像:

代码语言:javascript
运行
复制
magick identify -format '%f:%w:%h\n' *png *jpg | awk -F: '$2<100'
票数 1
EN

Stack Overflow用户

发布于 2021-09-17 21:14:56

多亏了另一个人,我去掉了x周围的空格,它起作用了。没有提到我不想使用任何工具,在我的服务器上找不到其他命令。

代码语言:javascript
运行
复制
find . -name '*.jpg' -exec file {} \; | sed 's/\(.*jpg\): .* \([0-9]*x[0-9]*\).*/\2 \1/' | awk 'int($1) < 250 {print}'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69228653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档