命令在目录中打印像素大小的图像

2022-01-30 00:51:40 标签 linuxshellcommand-line

是否有可能在一个目录中列出像素大小的栅格或小于x的所有图像?

我在另一个线程上发现了这个命令

find . -name '*.png' -exec file {} \; | sed 's/\(.*png\): .* \([0-9]* x [0-9]*\).*/\2 \1/' | awk 'int($1) < 250 {print}'

这个命令适用于*。png,但当我把它改为*。jpg时,结果变得太疯狂了。见下文。我希望将结果写入一个日志文件,以便以后可以从我的产品目录中删除这些图像。

* 。 png输出

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输出(像素大小被忽略,显然这个命令有问题)

./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

# # #file outpu输出1 x 2 for PNG PNG但1x2 for JPEG. YoJPEG。您的命令需要空格。

相反,可以使用identify from ImageMagick这样的工具,它可以以一种独立于格式的方式完成这项工作:

find . \( -name '*.jpg' -o -name '*.png' \) \
    -exec identify -format '%w %h %i\n' {} + |
    awk '$1 < 250'

###为了简单到更重,你有几个选择:

feh

exiftool

Ffprobe - ffmpeg的小朋友

ImageMagickidentify

根据Ubuntu的包库,你应该已经在Ubuntu 18的LTS中安装了feh,所以你可以使用:

feh -L "%f:%w:%h"  *.jpg *.png

样例输出

small.png:10:10
red.jpg:8:8
redhat.jpg:254:255

注意feh也接受-min-dimension和-max-dimension作为滤波器。所以对于所有大于640px的图片使用:

feh --min-dimension 640x0 -L "%f:%w:%h"  *.jpg *.png

你也可以使用exiftool来查找和打印高度或宽度小于100像素的图像,像这样:

exiftool -p '$filename:$imagewidth:$imageheight' -if '$imagesize and ($imagewidth<100 or $imageheight<100)' -q *.jpg *.png

样例输出

black.jpg:8:8
red.jpg:8:8
small.png:10:10

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

注意,exiftool的安装要比ImageMagick小得多。

Ubuntu 18 LTS也应该包括ffmpeg和它的小伙伴ffprobe,所以你可以这样做:

ffprobe -v error -select_streams v -show_entries stream=width,height  -of csv=p=0:s=x IMAGEFILE

或者使用ImageMagick来查找宽度为100的图像:

magick identify -format '%f:%w:%h\n' *png *jpg | awk -F: '$2<100'

感谢另一个家伙,我移除了x周围的空间,它工作了。没有提到,我不想使用任何工具,其他命令不能在我的服务器上找到。

find . -name '*.jpg' -exec file {} \; | sed 's/\(.*jpg\): .* \([0-9]*x[0-9]*\).*/\2 \1/' | awk 'int($1) < 250 {print}'
阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码