python画椭圆形,Python PIL:如何在图像中间绘制椭圆?

I seem to be having some trouble getting this code to work:

import Image, ImageDraw

im = Image.open("1.jpg")

draw = ImageDraw.Draw(im)

draw.ellipse((60, 60, 40, 40), fill=128)

del draw

im.save('output.png')

im.show()

This should draw an ellipse at (60,60) which is 40 by 40 pixels. The image returns nothing.

This code works fine however:

draw.ellipse ((0,0,40,40), fill=128)

It just seems that when i change the first 2 co-ords (for where the ellipse should be placed) it won't work if they are larger than the size of the ellipse to be drawn. For example:

draw.ellipse ((5,5,15,15), fill=128)

Works, but only shows part of the rect. Whereas

draw.ellipse ((5,5,3,3), fill=128)

shows nothing at all.

This happens when drawing a rectangle too.

解决方案

The bounding box is a 4-tuple (x0, y0, x1, y1) where (x0, y0) is the top-left bound of the box and (x1, y1) is the lower-right bound of the box.

To draw an ellipse to the center of the image, you need to define how large you want your ellipse's bounding box to be (variables eX and eY in my code snippet below).

With that said, below is a code snippet that draws an ellipse to the center of an image:

from PIL import Image, ImageDraw

im = Image.open("1.jpg")

x, y = im.size

eX, eY = 30, 60 #Size of Bounding Box for ellipse

bbox = (x/2 - eX/2, y/2 - eY/2, x/2 + eX/2, y/2 + eY/2)

draw = ImageDraw.Draw(im)

draw.ellipse(bbox, fill=128)

del draw

im.save("output.png")

im.show()

This yields the following result (1.jpg on left, output.png on right):

NO1FV.jpg

2A5DJ.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值