def draw(self, image): self._calculate_points() canvas = ImageDraw2.Draw(image) pen = ImageDraw2.Pen("blue", width=7, opacity=125) pen2 = ImageDraw2.Pen("red", width=7, opacity=125) brush = ImageDraw2.Brush("blue", 125) pos_1 = self.position[Part.POSITION] pos_2 = self.position[Part.TORSO] canvas.line(pos_1 + pos_2, pen) pos_1 = self.position[Part.POSITION] pos_2 = self.position[Part.UPPER_LEG_1] canvas.line(pos_1 + pos_2, pen2) pos_1 = self.position[Part.UPPER_LEG_1] pos_2 = self.position[Part.LOWER_LEG_1] canvas.line(pos_1 + pos_2, pen2) pos_1 = self.position[Part.POSITION] pos_2 = self.position[Part.UPPER_LEG_2] canvas.line(pos_1 + pos_2, pen) pos_1 = self.position[Part.UPPER_LEG_2] pos_2 = self.position[Part.LOWER_LEG_2] canvas.line(pos_1 + pos_2, pen) pos_1 = self.position[Part.TORSO] pos_2 = self.position[Part.UPPER_ARM_1] canvas.line(pos_1 + pos_2, pen2) pos_1 = self.position[Part.UPPER_ARM_1] pos_2 = self.position[Part.LOWER_ARM_1] canvas.line(pos_1 + pos_2, pen2) pos_1 = self.position[Part.TORSO] pos_2 = self.position[Part.UPPER_ARM_2] canvas.line(pos_1 + pos_2, pen) pos_1 = self.position[Part.UPPER_ARM_2] pos_2 = self.position[Part.LOWER_ARM_2] canvas.line(pos_1 + pos_2, pen) for part in Part: pos = self.position[part] if part == Part.HEAD: r = self.radius_head brush = ImageDraw2.Brush("blue", 125) canvas.ellipse((pos[0] - r, pos[1] - r, pos[0] + r, pos[1] + r), pen, brush) else: brush = ImageDraw2.Brush("red", 125) canvas.ellipse((pos[0] - 3.5, pos[1] - 3.5, pos[0] + 3.5, pos[1] + 3.5), None, brush) canvas.flush()
def _draw_joints(self, image, node: Node): canvas = ImageDraw2.Draw(image) brush = ImageDraw2.Brush("red", 125) pos = node.position canvas.ellipse( (pos[0] - 3.5, pos[1] - 3.5, pos[0] + 3.5, pos[1] + 3.5), None, brush) canvas.flush() for child in node.children: self._draw_joints(image, child)
def test_ellipse_edge(): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) brush = ImageDraw2.Brush("white") # Act draw.ellipse(((0, 0), (W - 1, H - 1)), brush) # Assert assert_image_similar_tofile(im, "Tests/images/imagedraw_ellipse_edge.png", 1)
def helper_rectangle(bbox): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) pen = ImageDraw2.Pen("green", width=2) brush = ImageDraw2.Brush("black") # Act draw.rectangle(bbox, pen, brush) # Assert assert_image_equal_tofile(im, "Tests/images/imagedraw_rectangle.png")
def helper_polygon(points): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) pen = ImageDraw2.Pen("blue", width=2) brush = ImageDraw2.Brush("red") # Act draw.polygon(points, pen, brush) # Assert assert_image_equal_tofile(im, "Tests/images/imagedraw_polygon.png")
def test_ellipse_edge(self): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) brush = ImageDraw2.Brush("white") # Act draw.ellipse(((0, 0), (W-1, H)), brush) # Assert self.assert_image_similar( im, Image.open("Tests/images/imagedraw_ellipse_edge.png"), 1)
def helper_ellipse(mode, bbox): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) pen = ImageDraw2.Pen("blue", width=2) brush = ImageDraw2.Brush("green") expected = f"Tests/images/imagedraw_ellipse_{mode}.png" # Act draw.ellipse(bbox, pen, brush) # Assert assert_image_similar_tofile(im, expected, 1)
def helper_ellipse(self, mode, bbox): # Arrange im = Image.new("RGB", (W, H)) draw = ImageDraw2.Draw(im) pen = ImageDraw2.Pen("blue", width=2) brush = ImageDraw2.Brush("green") expected = "Tests/images/imagedraw_ellipse_{}.png".format(mode) # Act draw.ellipse(bbox, pen, brush) # Assert self.assert_image_similar(im, Image.open(expected), 1)
def test_big_rectangle(): # Test drawing a rectangle bigger than the image # Arrange im = Image.new("RGB", (W, H)) bbox = [(-1, -1), (W + 1, H + 1)] brush = ImageDraw2.Brush("orange") draw = ImageDraw2.Draw(im) expected = "Tests/images/imagedraw_big_rectangle.png" # Act draw.rectangle(bbox, brush) # Assert assert_image_similar_tofile(im, expected, 1)
def _draw_sticks(self, image, node: Node, shadow=False): canvas = ImageDraw2.Draw(image) if shadow: color = "grey" else: color = "blue" if node.attributes is None else node.attributes.color pen = ImageDraw2.Pen(color, width=7, opacity=125) brush = ImageDraw2.Brush(color, 125) if node.attributes is None or not node.attributes.circle: canvas.line(node.parent.position + node.position, pen) else: pos = ((node.position[0] + node.parent.position[0]) / 2, (node.position[1] + node.parent.position[1]) / 2) r = math.sqrt((node.position[0] - node.parent.position[0])**2 + (node.position[1] - node.parent.position[1])**2) / 2 canvas.ellipse((pos[0] - r, pos[1] - r, pos[0] + r, pos[1] + r), pen, brush) canvas.flush() for child in node.children: self._draw_sticks(image, child, shadow)