有没有办法将图像文件夹(png、gif)转换为 Python 中的数组列表?

Posted

技术标签:

【中文标题】有没有办法将图像文件夹(png、gif)转换为 Python 中的数组列表?【英文标题】:Is there a way to convert a folder of images (pngs, gifs) to an arraylist in Python? 【发布时间】:2020-10-27 00:12:49 【问题描述】:

所以我正在创建一个不和谐机器人,作为一些朋友在我们服务器上的爱好! 我正在学习 python 编程以及 discord bot 的一些额外内容,但我不知道如何将图像文件夹转换为 ArrayList,以便我可以随机选择图像用于发送 gif 或png 作为回应!

【问题讨论】:

您可以使用cv2.imencode()将图像编码为字符串并将它们存储在ArrayList中,然后在响应中发送字符串并使用cv2.imdecode()对其进行解码 您具体在哪个部分苦苦挣扎? ArrayList 这不就是Java中的一种对象吗?请参阅How to Ask、help center。 【参考方案1】:

您可以尝试这样的方法来获取文件路径:

import os
imagePaths = [f for f in os.listdir('.') if os.path.isfile(f)]
# Assuming you have a directory of only .pngs and .gifs

当您需要随机选择一个时,以下可能会有所帮助

import random

randomImagePath = random.choice(imagePaths)

实际发送图片可以看this answer。为了保持一致性,我将在一个小测试脚本中添加它的整体外观:

import os
import random
import discord

""" Any discord setup needed """

def imageGenerator():
    imagePaths = [f for f in os.listdir('.') if os.path.isfile(f)]
    while True:
        yield random.choice(imagePaths)

if __name__ == "__main__":
    gen = imageGenerator()
    with open(next(gen), 'rb') as f:
        picture = discord.File(f)
        await channel.send(channel, picture)

【讨论】:

非常感谢您的回复!导入os的第一部分,“[f for f in os.listdir('.') if os.path.isfile(f)]”代表什么? 当然,os.listdir 将列出目录"." 中的所有内容,这是您的工作目录。 os.path.isfile 所做的是检查它们是否确实是正在添加的文件(listdir 也会添加它找到的任何目录,此过滤器因此只有文件在您的列表中) 我明白了!所以我正在查看您定义函数 imageGenerator 的测试脚本。我使用await ctx.send(file=discord.File( file name) in 的方法发送图片。那么,理论上,我是否可以调用 imageGenerator 函数来代替文件名,因为它包含随机图像? 您应该使用next(gen) 作为文件名。它是一个生成器,而不是一个函数。我也可以实现一个函数实现,但我觉得生成器更适合你的情况 我明白了!那么在 if 语句中,Namemain 将代表什么作为变量以及 'rb'?【参考方案2】:
import random
import glob

image_paths = glob.glob("Plate_examples/*.jpg") #load all the jpg file from this directory
img = []
for images in image_paths: #loop through the list of image path
    img.append(images)   # append each image path into this list 
    
randomImagePath = random.choice(img) # select each path at random

【讨论】:

imgimage_paths 不一样吗?复制变量的目的是什么。

以上是关于有没有办法将图像文件夹(png、gif)转换为 Python 中的数组列表?的主要内容,如果未能解决你的问题,请参考以下文章

PHP:将 png 和 gif 转换为灰度

使用 ImageMagick 将 gif 转换为 png 时出现“转换:不正确的图像标题”错误

使用 imagemagick 将 GIF 图像转换为 PNG,但得到的是 RGBA 图像而不是调色板版本

将不同的图片格式(jpg、gif、png等)转换为TIFF格式

有没有办法使用 ffmpeg 将 GIF 的所有帧保存到 PNG 中?

Python:将 GIF 帧转换为 PNG