【问题标题】:Is there a fast way to save images files on python?有没有一种快速的方法可以在 python 上保存图像文件?
【发布时间】:2019-01-18 22:49:41
【问题描述】:

我制作了一个程序来过滤只有 20 种颜色的图像,我想保存程序正在制作的过程直到它完成,我已经成功保存了图像但是需要很多时间。

假设用户给了我一张 800x600 的图像,我的程序大约需要 15 秒或更短的时间来完成图像编辑,但如果我在每一步后保存,则大约需要 10 分钟。因为每次保存后,程序都在等待文件准备好,尽管它不需要图像,它可以继续前进并让 winodws 处理它。

我试过用线程来做,我得到了相同的结果,每张图像大约 1 秒..

from PIL import Image
from PIL import ImageGrab

im = Image.open('braw.png') # Can be many different formats.
rgb_im = im.convert('RGB')

pix = rgb_im.load()

height, width = im.size
image = ImageGrab.grab()
path = os.getcwd()

def read_color(height,width, COLORS):
    for x in range(height):
        for y in range(width):
            r,g,b = rgb_im.getpixel((x,y))
            color = closest_color(r, g, b, COLORS)
            back_work(color,x,y)
            save_frame(x, '/frames')

def save_frame(x, location):
    try:
        rgb_im.save(path + location+'/ark_ai' + str(x) + '.jpeg')
    except OSError:
        sleep(0.5)

def back_work(color, x, y):
    pix[x,y] = color

我预计程序会在每次循环后继续保存图像,即使它没有完成,有没有更快的方法来做到这一点,我不知道?

【问题讨论】:

  • 请问closest_color() 的代码在哪里?
  • 另外,减少颜色然后另存为JPEG是没有意义的,这将再次增加颜色数量!

标签: python image-processing


【解决方案1】:

看起来您每次更新像素时都在保存,这意味着您将保存 480,000 张图像,总共有 691 GB 写入磁盘。当然,并非所有这些都将立即保存到硬盘驱动器,因为您覆盖了 99% 的文件。尽管如此,这是大量的文件 I/O,您根本无法加快速度。

为什么不尝试在每个更新后保存,而不是每个像素?这将使您节省的量减少 600 倍。并且输出应该是相同的,因为您只是跳过了保存本来会被覆盖的帧。

def read_color(height,width, COLORS):
    for x in range(height):
        for y in range(width):
            r,g,b = rgb_im.getpixel((x,y))
            color = closest_color(r, g, b, COLORS)
            back_work(color,x,y)
        save_frame(x, '/frames')

【讨论】:

  • 谢谢!现在快多了:)
猜你喜欢
  • 2020-12-01
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多