Leia o tamanho da captura de tela do celular vivo mobile.jpg e outros arquivos

Este código foi originalmente projetado para resolver alguns pontos problemáticos no processo de processamento de imagens. Imagine, todos nós já nos deparamos com essa situação: fotos tiradas por câmeras e fotos baixadas da Internet vêm em vários tamanhos. E estamos ansiosos para organizá-los em um conjunto de fotos com tamanhos uniformes para torná-los mais bonitos e fáceis de comparar, e até mesmo fazer as pessoas quererem fazer uma festa de comemoração para seu "tamanho de uniforme" de curto prazo!

input默认读取 /storage/emulated/0/Pictures/Screenshots/Screenshot_20231001_132228.jpg 尺寸大小
输入错误就直接读取这个路径图片尺寸,
将和它相同尺寸的图片移动到 /storage/emulated/0/Pictures/图片要删除/
没有这个文件夹就新建

那个我是要移动那个读渠道的尺寸,然后按照这个尺寸,移动这个文件夹下的这个相同的尺寸
优雅热诚幽默注释


O código é como um pequeno organizador de imagens. Sua missão é ajudá-lo a selecionar as imagens que correspondem exatamente ao tamanho especificado desejado entre um grande número de imagens bagunçadas e movê-las para um local limpo e organizado na pasta de destino.

Portanto, para atingir esse objetivo, escrevemos este código para explorar as imagens na pasta de origem uma por uma e compará-las uma por uma com o tamanho da imagem que você especificou. Assim que encontrarmos uma imagem com tamanho exato, movemo-la para a pasta de destino sem hesitação. Desta forma, na hora de organizar as fotos, basta entregar o “pequeno assistente” ao código, e ele o ajudará de forma automática e meticulosa a realizar esta tediosa tarefa, economizando tempo e esforço e realizando-a de uma só vez!

Ahem, tentei escrever uma versão anotada elegante, calorosa e bem-humorada:


from PIL import Image  # 导入PIL库,用于处理图片(因为机器也想变成梦工厂的缩小药水)
import os  # 导入os库,用于文件和目录操作(让我们来操作文件的世界吧!)
import shutil  # 导入shutil库,用于文件移动操作(我们要把文件从这里移到那里,就像魔术师一样!)
from tqdm import tqdm  # 导入tqdm库,用于显示进度条(进度条是你最可靠的盆友)
import imghdr  # 导入imghdr库,用于判断文件是否为图片类型(我们需要知道它是不是真的图片哦)

# 判断文件是否为图片类型(如果它不是图片,那它就是一只假冒伪劣产品)
def is_image_file(file_path):
    return imghdr.what(file_path) is not None

# 读取指定图片尺寸并存储到列表中(我们要知道图片的大小,才能做出更好的选择)
def get_image_size(image_path):
    try:
        image = Image.open(image_path)
        return image.size
    except FileNotFoundError:
        return None

# 移动与指定图片尺寸相同的图片到目标文件夹(我们要找到和它一样大的伙伴,一起吃饭!)
def move_similar_images(source_folder, target_folder, size):
    # 创建目标文件夹(如果不存在),我们要给他找个家!
    if not os.path.exists(target_folder):
        os.makedirs(target_folder)

    # 遍历源文件夹中的所有文件,就像一个侦探一样搜寻线索!
    for filename in tqdm(os.listdir(source_folder)):
        file_path = os.path.join(source_folder, filename)
        if os.path.isfile(file_path) and is_image_file(file_path):
            image_size = get_image_size(file_path)
            if image_size is not None and image_size == size:
                # 移动相同尺寸的图片到目标文件夹,让它们团聚在一起!
                shutil.move(file_path, target_folder)

# 指定文件夹路径和图片名称,我们要准确定位!
folder_path = '/storage/emulated/0/Pictures/Screenshots/'  # 源文件夹路径(从这里找)
image_name = 'Screenshot_20231001_132228.jpg'  # 指定的图片名称(我们要找的那张)

# 读取指定图片的尺寸,看看它有多大才决定是不是我们要的那个!
image_path = os.path.join(folder_path, image_name)
image_size = get_image_size(image_path)
if image_size is None:
    print("找不到指定的图片文件。")  # 找不到的话,我们要告诉用户它去哪儿了!
else:
    print("指定图片尺寸大小:{}x{}".format(image_size[0], image_size[1]))  # 告诉用户图片有多大不会吓到他们!

    # 移动与指定图片尺寸相同的图片到目标文件夹,我们要把他们召集起来!
    target_folder = '/storage/emulated/0/Pictures/图片要删除/'
    move_similar_images(folder_path, target_folder, image_size)

Ao mesmo tempo, para melhorar a legibilidade e a eficiência do processamento do código, usamos de forma inteligente algumas funções de biblioteca excelentes. Por exemplo, a biblioteca PIL é um artefato usado especialmente para processamento de imagens e nos ajuda a avaliar facilmente o tamanho das imagens. A biblioteca os desempenha um papel importante nas operações de arquivos e caminhos, a biblioteca shutil completa a movimentação de arquivos e pastas e a biblioteca tqdm adiciona elementos para processar barras de progresso, tornando todo o processo como um jogo de corrida contra o tempo. Esses designs engenhosos e a aplicação requintada das funções da biblioteca tornam o código não apenas poderoso, mas também adicionam um toque de interesse humano.

Método 2:

# 导入 Python Imaging Library 库用于处理图片(好像这个库叫做 PIL 也可以)
from PIL import Image

# 导入 os 库用于文件操作和路径操作(让我们来操作文件吧!)
import os

# 导入 shutil 库用于移动文件和文件夹(我们要把图片移动到哪里呢?)
import shutil

# 导入 tqdm 库用于展示进度条(进度条,让我们看得到代码进展了!)
from tqdm import tqdm


# 判断文件是否为图片类型(我们只需要图片文件)
def is_image_file(file_path):
    # 设置一个包含合法扩展名的列表(哪些扩展名是图片类型的呢?)
    valid_extensions = ['.jpg', '.jpeg', '.png', '.gif']

    # 获取文件扩展名并转换成小写格式(因为文件扩展名大小写不一定,我们把它都转换成小写来比较)
    ext = os.path.splitext(file_path)[1].lower()

    # 判断文件扩展名是否在合法扩展名列表中(判断一下这个文件是不是图片类型)
    return ext in valid_extensions


# 获取指定图片尺寸(我们需要知道限定的图片尺寸)
def get_image_size(image_path):
    try:
        # 打开图片并获取其大小(打开图片文件,获取它的大小)
        image = Image.open(image_path)
        
        # 返回图片的尺寸大小
        return image.size
    except FileNotFoundError:
        # 如果文件不存在,则返回 None(如果文件不存在,我们就返回空)
        return None


# 移动与指定图片尺寸相同的图片到目标文件夹(让我们把符合要求的图片移动到目标文件夹吧!)
def move_similar_images(source_folder, target_folder, size):
    # 如果目标文件夹不存在,则创建它(万一目标文件夹不见了呢?)
    if not os.path.exists(target_folder):
        os.makedirs(target_folder)

    # 使用 os.walk() 遍历源文件夹下的所有子文件夹和文件(我们要找到那些符合要求的图片文件)
    for root, dirs, files in os.walk(source_folder):
        for filename in tqdm(files):
            # 构造文件路径(得到图片文件的完整路径)
            file_path = os.path.join(root, filename)

            # 如果文件是图片类型,则进一步处理(我们只需要处理图片类型的文件)
            if is_image_file(file_path):

                # 获取图片尺寸并与指定尺寸比较(看看这张图片的尺寸是不是我们想要的)
                image_size = get_image_size(file_path)
                if image_size is not None and image_size == size:

                    # 将相同尺寸的图片移动到目标文件夹中(好了,符合要求的图片就可以移动到目标文件夹了)
                    shutil.move(file_path, target_folder)


# 指定源文件夹路径和目标文件夹路径(我们需要知道源文件夹和目标文件夹的位置)
source_folder = '/storage/emulated/0/Pictures/Screenshots/'
target_folder = '/storage/emulated/0/Pictures/图片要删除/'

# 图片名称和路径(我们需要提供一张指定尺寸的图片,来找到符合要求的图片)
image_name = 'Screenshot_20231001_132228.jpg'
image_path = os.path.join(source_folder, image_name)

# 获取指定图片尺寸(我们需要知道限定的图片尺寸)
image_size = get_image_size(image_path)
if image_size is None:
    # 如果获取不到指定图片,则打印信息(如果找不到指定的图片文件,那就告诉我们吧!)
    print("找不到指定的图片文件。")
else:
    # 打印指定图片的尺寸大小(好的,我们取得了指定图片的尺寸,让我们看看它的大小吧!)
    print("指定图片尺寸大小:{}x{}".format(image_size[0], image_size[1]))

    # 移动与指定图片尺寸相同的图片到目标文件夹(那么现在,符合要求的图片就可以移动到目标文件夹啦!)
    move_similar_images(source_folder, target_folder, image_size)

Este comentário pode ajudá-lo a entender a lógica do código e a função de cada função.

Em um exemplo de processamento de imagens, filtramos as imagens do mesmo tamanho da imagem especificada e as movemos para a pasta de destino especificada para organizar a coleção de imagens e retemos apenas as imagens do tamanho especificado para torná-las mais organizadas e ordenadas.

Por que precisamos deste código?

Organização de álbum de fotos: lembro de uma viagem e tirei muitas fotos em vários tamanhos. Para encontrar facilmente esses momentos lindos, selecionei fotos do mesmo tamanho e coloquei em uma pasta para relembrar aquela viagem maravilhosa.
Tamanho uniforme: Certa vez, para fazer um vídeo sobre meu crescimento, precisei ajustar as fotos de vários estágios para o mesmo tamanho. Quando vi aquelas fotos do mesmo tamanho de épocas diferentes, senti uma onda de emoção no coração.
Análise de dados: Certa vez, em uma exposição, vi pesquisadores realizarem análises de dados filtrando fotos do mesmo tamanho, o que revelou alguns padrões interessantes. Naquele momento, fiquei maravilhado com a magia da tecnologia e elogiei esses pesquisadores que trabalhavam silenciosamente.

Para realizar as funções acima, escrevemos este código. Ele percorre todos os arquivos de imagem na pasta de origem e determina um por um se suas dimensões são iguais às da imagem especificada.

Se forem iguais, mova-os para a pasta de destino.

A vantagem disso é que pode nos ajudar a automatizar essa tarefa e melhorar a eficiência do processamento.

Ao mesmo tempo, algumas funções de biblioteca comumente usadas são usadas no código, como a biblioteca PIL para processamento de imagens, a biblioteca os para operações de arquivos e caminhos, a biblioteca shutil para mover arquivos e pastas e a biblioteca tqdm para exibir o barra de progresso do processamento. O uso dessas funções de biblioteca pode simplificar nosso trabalho de desenvolvimento e aumentar a legibilidade do código.

おすすめ

転載: blog.csdn.net/weixin_73675558/article/details/133464639