Вы можете обрезать область изображения как новую переменную. В этом случае я обрезал 120x120 пикселей из исходного изображения. Он повернут на 90 и затем вставлен обратно на оригинал.
from PIL import Image
img = Image.open('./image.jpg')
sub_image = img.crop(box=(200,0,320,120)).rotate(90)
img.paste(sub_image, box=(200,0))
Так я думал об этом немного больше и обработал функцию, которая применяет круглую маску для обрезанного изображения перед поворотами. Это позволяет произвольный угол без странных эффектов.
def circle_rotate(image, x, y, radius, degree):
img_arr = numpy.asarray(image)
box = (x-radius, y-radius, x+radius+1, y+radius+1)
crop = image.crop(box=box)
crop_arr = numpy.asarray(crop)
# build the cirle mask
mask = numpy.zeros((2*radius+1, 2*radius+1))
for i in range(crop_arr.shape[0]):
for j in range(crop_arr.shape[1]):
if (i-radius)**2 + (j-radius)**2 <= radius**2:
mask[i,j] = 1
# create the new circular image
sub_img_arr = numpy.empty(crop_arr.shape ,dtype='uint8')
sub_img_arr[:,:,:3] = crop_arr[:,:,:3]
sub_img_arr[:,:,3] = mask*255
sub_img = Image.fromarray(sub_img_arr, "RGBA").rotate(degree)
i2 = image.copy()
i2.paste(sub_img, box[:2], sub_img.convert('RGBA'))
return i2
i2 = circle_rotate(img, 260, 60, 60, 45)
i2
Попробуйте включить изображение в ваш вопрос без ссылки на него. – gowrath
сделано сэр, [это изображение] (http://i.stack.imgur.com/PxGtN.png) –
Сделайте копию изображения; обрезать до нужной области, которую вы хотите повернуть, повернуть и вставить в оригинал. Это работает? – gowrath