【问题标题】:command to print images with pixel size within directory在目录中打印具有像素大小的图像的命令
【发布时间】:2021-09-17 19:36:17
【问题描述】:

是否可以列出目录中像素大小大于或小于 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

【问题讨论】:

    标签: linux shell command-line


    【解决方案1】:

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

    相反,请使用 ImageMagick 中的 identify 之类的工具,它可以以独立于格式的方式执行此操作:

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

    【讨论】:

    • 我认为你需要%f 而不是%F
    • %f 只是文件名,%F 包括路径
    • 不会了,我想...imagemagick.org/script/escape.php
    • 有趣。 %f 在我的 6.9.11-24 上失败。你用的是哪个版本?
    • 我在 v7.1.0-5
    【解决方案2】:

    按照从简单到重量级的顺序,您有多种选择:

    • feh
    • exiftool
    • ffprobe - ffmpeg的小朋友
    • ImageMagick identify

    根据Ubuntu package repository,你应该在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 作为过滤器。因此,对于所有宽度超过 640 像素的图像,请使用:

    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,使用它来查找宽度

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-06
        • 2019-07-28
        • 2012-09-25
        • 2021-07-23
        • 2021-08-23
        • 2014-03-07
        • 2015-02-27
        相关资源
        最近更新 更多