有没有一种快速的方法可以将图像文件保存在python上?

时间:2019-01-18 14:40:13

标签: python image-processing

我制作了一个程序来仅过滤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

我期望程序在每次循环后都会保存图像,即使没有执行完,是否有一种更快的方式来使我不知道?

1 个答案:

答案 0 :(得分:2)

似乎每次更新像素时您都在保存,这意味着您要保存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')