Я хочу загрузить 32-битный файл EXR, а затем изменить его размер до очень маленького разрешения, например 200x200, и вывести его как 8-битный JPG. Проблема в том, что для ввода изображения требуется в лучшем случае 2 секунды, и мне даже не нужны все те данные, которые идут с изображением.
Есть ли способ ввода EXR, например, с более низким разрешением или с каждым n-м пикселем, чтобы весь процесс был быстрее?
def main(exrfile, jpgfile):
file = OpenEXR.InputFile(exrfile)
pt = Imath.PixelType(Imath.PixelType.FLOAT)
dw = file.header()['dataWindow']
size = (dw.max.x - dw.min.x + 1, dw.max.y - dw.min.y + 1)
rgbf = [Image.frombytes("F", size, file.channel(c, pt)) for c in "RGB"]
extrema = [im.getextrema() for im in rgbf]
darkest = min([lo for (lo,hi) in extrema])
lighest = max([hi for (lo,hi) in extrema])
scale = 255 / (lighest - darkest)
def normalize_0_255(v):
return (v * scale) + darkest
rgb8 = [im.point(normalize_0_255).convert("L") for im in rgbf]
Image.merge("RGB", rgb8).resize((200,200)).save(jpgfile)