如何按高度或宽度搜索照片?

如何按高度或宽度搜索照片?

我想搜索长宽比为 4:3 的照片,然后将它们复制到闪存驱动器中以供数码相框使用。我知道如何在 Windows 中使用height:3000(例如)图形 shell 执行此操作。如何在 Nautilus 或命令行中执行相同操作?

答案1

您可以使用简单的 shell 脚本来实现此目的。search.sh使用以下命令在照片文件夹中创建任意文件

gedit search.sh

并粘贴以下几行:

#!/bin/bash

mkdir  /home/$USER/test
for i in *.jpg; do
read -r w h <<<$(identify -format "%w %h" "$i")
if [ `expr $h / $w` ==  `expr 4 / 3` ]; then
cp "$i" /home/$USER/test/
fi
done

Ctrl使用+保存此文件s并使用使其可执行

sudo chmod +x search.sh

然后使用命令执行

./search.sh

它将把所有照片复制4:3test您的主目录中。如果您想复制到闪存驱动器或其他地方,则在脚本中进行更改,如果identify系统中没有命令,那么您可以使用命令安装:

sudo apt-get install imagemagick

答案2

从递归目录提取图像

以下脚本将以递归方式将比例为 4:3 的图像从源目录复制到目标目录。该脚本读取所有常见图像格式,非图像文件将被忽略(在 中提升IOError

#!/usr/bin/env python3
import os
import shutil
from PIL import Image
import sys

dr = sys.argv[1]; target = sys.argv[2]

for root, dirs, files in os.walk(dr):
    for f in files:
        try:
            file = root+"/"+f
            img = Image.open(file); size = img.size; ratio = size[0]/size[1]
            if ratio == 4/3:
                shutil.copyfile(file, target+"/"+f)
        except (IOError, ValueError):
            pass

如何使用

  • 将脚本复制到一个空文件中,另存为search_ratio.py
  • 通过命令运行:

    python3 /path/to/search_ratio.py /source/directory /target/directory
    

如果一个或多个目录包含空格,请使用引号。
我用于测试的示例命令:

python3 '/home/jacob/Bureaublad/pscript_4.py' '/home/jacob/Bureaublad' '/home/jacob/Afbeeldingen/test'

如果你从“平面”(单一)目录中提取图像

那么脚本可以稍微简单一点:

#!/usr/bin/env python3
import os
import shutil
from PIL import Image
import sys

dr = sys.argv[1]; target = sys.argv[2]

for f in os.listdir(dr):
    try:
        file = dr+"/"+f
        img = Image.open(file); size = img.size; ratio = size[0]/size[1]
        if ratio == 4/3:
            shutil.copyfile(file, target+"/"+f)
    except (IOError, ValueError):
        pass

与第一个完全一样使用。

请注意,使用第一个脚本时,如果不同的源文件夹中的名称重复,就会发生名称冲突。

相关内容