# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw
def drawAndShow(picpath, bbox, scale, savepath, position=2):
# bbox (x0,y0,x1,y1) 即 (left, upper, right, lower)
bbox_wid = bbox[2] - bbox[0] + 1
bbox_hei = bbox[3] - bbox[1] + 1
newbbox = (bbox[0], bbox[1], bbox[2] + 1, bbox[3] + 1)
bbox_wid_scale = scale * bbox_wid
bbox_hei_scale = scale * bbox_hei
im = Image.open(picpath)
pic_wid = im.size[0]
pic_hei = im.size[1]
# 画框
draw = ImageDraw.Draw(im)
draw.rectangle(bbox, outline=(255, 0, 0))
# 截取并放大
imcrop = im.resize(size=(bbox_wid_scale, bbox_hei_scale), box=newbbox)
# 粘贴
if position == 1: # 左下角
im.paste(imcrop, box=(0, pic_hei - bbox_hei_scale, bbox_wid_scale, pic_hei))
if position == 2: # 右下角
im.paste(imcrop, box=(pic_wid - bbox_wid_scale, pic_hei - bbox_hei_scale, pic_wid, pic_hei))
im.save(savepath)
im.show()
if __name__ == '__main__':
bbox = (55, 22, 55 + 60, 22 + 60)
drawAndShow(picpath='pic1_ori.png', scale=2, bbox=bbox, savepath='_pic1_ori.png')
picpath:需要显示的图的绝对路径
bbox:需要放大图中的哪个区域。 用四个坐标表示(x0,y0,x1,y1) 即 (left, upper, right, lower)
scale:需要把这个区域放大几倍
savepath:处理后的图的保存路径
position:把重点区域显示在什么位置。 1是左下角,2是右下角。
效果图: