Я думал, что я мог бы срезать изображение вокруг центра, сначала переведя его, затем сдвинув, затем переведя обратно.
def translate(im: Image.Image, tx: float=0, ty: float=0):
return im.transform(im.size, Image.AFFINE, (1, 0, tx, 0, 1, ty))
def shear(im: Image.Image, cx=0, cy=0):
center = [xy/2 for xy in im.size]
im = translate(im, center[0], center[1])
im = im.transform(im.size, Image.AFFINE, (1, cx, 0, cy, 1, 0))
im = translate(im, -center[0], -center[1])
return im
К сожалению, перевод теряет информацию, и я получаю следующее