python配置中心_Python-PIL中具有可设置中心和缩放比例的裁剪图像

这只是一个中心和尺寸正确的问题。在确定要裁剪的点的中心

使用比例因子确定新尺寸

确定裁剪图像的边界框

下面的脚本应该可以做到这一点。在import os.path

from PIL import Image

def get_img_dir():

src_dir = os.path.dirname(__file__)

img_dir = os.path.join(src_dir, '..', 'img')

return img_dir

def open_img():

img_dir = get_img_dir()

img_name = 'amsterdam.jpg'

full_img_path = os.path.join(img_dir, img_name)

img = Image.open(full_img_path)

return img

def crop_image(img, xy, scale_factor):

'''Crop the image around the tuple xy

Inputs:

-

img: Image opened with PIL.Image

xy: tuple with relative (x,y) position of the center of the cropped image

x and y shall be between 0 and 1

scale_factor: the ratio between the original image's size and the cropped image's size

'''

center = (img.size[0] * xy[0], img.size[1] * xy[1])

new_size = (img.size[0] / scale_factor, img.size[1] / scale_factor)

left = max (0, (int) (center[0] - new_size[0] / 2))

right = min (img.size[0], (int) (center[0] + new_size[0] / 2))

upper = max (0, (int) (center[1] - new_size[1] / 2))

lower = min (img.size[1], (int) (center[1] + new_size[1] / 2))

cropped_img = img.crop((left, upper, right, lower))

return cropped_img

def save_img(img, img_name):

img_dir = get_img_dir()

full_img_path = os.path.join(img_dir, img_name)

img.save(full_img_path)

if __name__ == '__main__':

ams = open_img()

crop_ams = crop_image(ams, (0.50, 0.50), 0.95)

save_img(crop_ams, 'crop_amsterdam_01.jpg')

crop_ams = crop_image(ams, (0.25, 0.25), 2.5)

save_img(crop_ams, 'crop_amsterdam_02.jpg')

crop_ams = crop_image(ams, (0.75, 0.45), 3.5)

save_img(crop_ams, 'crop_amsterdam_03.jpg')

原始图像:

DchDL.jpg

crop_amsterdam_01.jpg:

hnihL.jpg

crop_amsterdam_02.jpg:

1w8Zx.jpg

crop_amsterdam_03.jpg:

ifgTL.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值