图像存储在 JPEG 和 PNG 文件中。我想要获得其中那些正方形的列表。
答案1
convert
您可以使用ImageMagick 和 Awk 中的命令来执行此操作:
convert *.png *.jp* -format '%w %h %f\n' info: | awk '$1==$2 { $1=$2=""; print substr($0, 3) }'
上面的命令将输出具有以下内容的图像列表确切地水平和垂直像素数相同。相反,如果您想要查找的是仅视觉上近似一个正方形,你可以这样做:
# Find all images in which one side is no more than 5% larger than the other.
convert *.png *.jp* -format '%w %h %f\n' info: | awk '($1>$2?$1:$2)/($1>$2?$2:$1)<=1.05 { $1=$2=""; print substr($0, 3) }'
请注意,如果图像的文件名包含换行符,则这两个命令都无法正常工作。
答案2
exiftool
在当前目录( )中使用.
:
exiftool -q -if '$ImageHeight == $ImageWidth' -p '$Filename' -ext jpg .
另一种方法来做到这一点imagemagick
(通过fx
特殊运算符):
for f in ./*.[jJ][pP][gG]
do
(( $(identify -format '%[fx:(h == w)]' "$f") )) && printf '%s\n' "$f"
done
表达式'%[fx:(h == w)]'
返回1
iftrue
和0
if false
so,反过来, 的返回值(( ))
也将true
分别为 和false
。
两种解决方案都假设输入文件具有jpg
或JPG
扩展名。根据您的需要调整...
Aslo,参见恩威克如果你正在搜索以下文件,请查看下面的评论看大致呈正方形。
答案3
以下解决方案基于@loa_in_评论中的想法。它使用file
,对于此任务来说,它比 快得多convert
。它还可以正确处理“奇怪”的文件名。
file -F '' -0 *.png \
| sed -e 's/^\(.*\)\x00.*PNG.*, \([0-9]\+\) x \([0-9]\+\).*$/\2 \3 \1/;s/^\(.*\)\x00.*JPEG.*, \([0-9]\+\)x\([0-9]\+\).*$/\2 \3 \1/' \
| awk '$1==$2 { $1=$2=""; print substr($0, 3) }'
file
JPEG 和 PNG 文件的输出的分辨率部分看起来不同,因此我们单独解析它。
答案4
@nwk 的改进版本,可在任何子目录中包含方形 png 图像:
find . -name \*.png -print0 | xargs -0 -I{} convert {} -format '%w %h %f\n' info: | awk '$1==$2 { $1=$2=""; print substr($0, 3) }'