Подсказка 1: используйте Image.BICUBIC
вместо Image.BILINEAR
.К сожалению, rotate
не принимает Image.ANTIALIAS
, что обеспечит еще лучший результат.
Подсказка 2: вместо поворота фона и его поворота позже, поверните изображение, которое вы хотите вставить.
Совет 3: создайте изображение в формате 'L'
, которое будет чисто белым и того же размера, что и вставляемое изображение.Поверните его так же.Используйте его в качестве аргумента маски для paste
.
Я не проверял этот код, но он должен работать.Один вопрос, однако, что
quality = 250
должен достичь?Например, параметры
JPEG принимают значения только от 1 до 95.
# open the profile pic
im = PIL.Image.open(pic)
# resize it to dim of oblique box
im = im.resize((picX, picY), PIL.Image.ANTIALIAS)
# this is the degree of oblique box
degree = 13.67
# open the background
bg = PIL.Image.open(bgsrc)
bgosize = bg.size
bginfo = bg.info
# create a copy of the profile that is all white
mask = PIL.Image.new('L', im.size, 0xff)
# rotate the profile and the mask
im = im.rotate(degree, resample = PIL.Image.BICUBIC, expand = True)
mask = mask.rotate(degree, resample = PIL.Image.BICUBIC, expand = True)
# paste the profile pic to background
bg.paste(im, (px1, py1, px2, py2), mask)
PIL.ImageFile.MAXBLOCK = bg.size[0] * bg.size[1]
bg.save(dst, quality = 250, optimize = True, **bginfo)