Основываясь на ответах на сегодняшний день, я предполагаю, что ответ будет "нет".
Но вы всегда можете использовать numpy для эффективного выполнения этой работы:
def colorswap(pixel):
"""Shifts the channels of the image."""
return (pixel[1], pixel[2], pixel[0])
def npoint(img, func):
import numpy as np
a = np.asarray(img).copy()
r = a[:,:,0]
g = a[:,:,1]
b = a[:,:,2]
r[:],g[:],b[:] = func((r,g,b))
return Image.fromarray(a,img.mode)
img = Image.open('test.png')
img2 = npoint(img, colorswap)
img2.save('test2.png')
Бонус: похоже, класс Image не предназначен только для чтения, что означает, что вы можете сделать вашу новую функцию npoint
еще более похожей на point
(не рекомендуется, если не сбивает с толку людей):
Image.Image.npoint = npoint
img = Image.open('test.png')
img2 = img.npoint(colorswap)