Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 对于绘图部分,枕头的坐标系似乎不同_Python 3.x_Python Imaging Library - Fatal编程技术网

Python 3.x 对于绘图部分,枕头的坐标系似乎不同

Python 3.x 对于绘图部分,枕头的坐标系似乎不同,python-3.x,python-imaging-library,Python 3.x,Python Imaging Library,根据文件,枕头的坐标系如下: Python图像库使用笛卡尔像素坐标系,左上角为(0,0)。注意,坐标是指隐含的像素角点;被称为(0,0)的像素的中心实际上位于(0.5,0.5) 坐标通常以2元组(x,y)的形式传递给库。矩形表示为4元组,首先给出左上角。例如,覆盖所有800x600像素图像的矩形写为(0,0,800,600) 对于“图像操纵”区域(如“裁剪”和“粘贴”命令),这是正确的,但“绘制”区域使用另一个坐标系,尽管文档中说明了它是相同的: 图形界面使用与PIL本身相同的坐标系,左上角为

根据文件,枕头的坐标系如下:

Python图像库使用笛卡尔像素坐标系,左上角为(0,0)。注意,坐标是指隐含的像素角点;被称为(0,0)的像素的中心实际上位于(0.5,0.5)

坐标通常以2元组(x,y)的形式传递给库。矩形表示为4元组,首先给出左上角。例如,覆盖所有800x600像素图像的矩形写为(0,0,800,600)

对于“图像操纵”区域(如“裁剪”和“粘贴”命令),这是正确的,但“绘制”区域使用另一个坐标系,尽管文档中说明了它是相同的:

图形界面使用与PIL本身相同的坐标系,左上角为(0,0)

例如,如果我运行此程序:

从PIL导入图像
从PIL导入ImageDraw
NewPhoto=Image.new('RGB',(16,16),'white')
Draw=ImageDraw.Draw(新照片)
绘制矩形((4,4,12,12),填充为灰色)
对于范围(3、14、2)内的X:
画线((X,5,X,8),填充=黑色,宽度=1)
NewPhoto.show()
我得到一个9x9的矩形,而不是预期的8x8()。我正在MacOS 10.13.6上运行Python3.8,使用Pillow 6.2.0

另一个例子:

从PIL导入图像
从PIL导入ImageDraw
NewPhoto=Image.new('RGB',(16,16),'white')
Draw=ImageDraw.Draw(新照片)
绘制矩形((4,4,12,12),填充为灰色)
框=(4,4,13,13)
region=NewPhoto.crop(框)
NewPhoto2=Image.new('RGB',(16,16),'red')
新照片2.粘贴(区域、框)
NewPhoto2.show()
枕头的裁剪和粘贴功能如广告所示,但矩形(4,4,12,12)太大,完全填充裁剪区域(4,4,13,13)


我是否做错了什么,文档是否有错,或者是否有其他问题可以解释这种差异?

正如
Draw的第一个参数所解释的那样。矩形是四个角点。在x坐标4和12之间有9列(两端都包括在内),因此矩形的宽度为9像素。高度也是如此。

不,这并不能解释这一点。该文档中说:“xy–定义边界框的四个点。顺序为[(x0,y0),(x1,y1)]或[x0,y0,x1,y1]。第二个点正好在绘制的矩形外。”但它在。。。