2015-12-13 1118 views
8

ImageDraw PIL/yastık modülünü kullanarak bir resmin üzerine kalın dikdörtgenler çizmeye çalışıyorum. PIL'de bir dikdörtgenin genişliğini belirtmenin bir yolu var mı?

Ben draw.rectangle([x1, y1, x2, y2], outline='yellow', width=3) kullanarak çalıştı ama genişlik parametresini gibi görünmüyor.

Ben çizgilerin bir grup ile ne yapmak istediğinizi taklit edebilir, ancak bunu yapmanın uygun bir yol olup olmadığını merak ediyorum.

''' 
coordinates = [x1, y1, x2, y2] 

    (x1, y1) 
     *-------------- 
     |    | 
     |    | 
     |    | 
     |    | 
     |    | 
     |    | 
     --------------* 
         (x2, y2) 

''' 
def draw_rectangle(drawing, coordinates, color='yellow', width=3): 
    #top 
    line_coordinates = [coordinates[0], coordinates[1], coordinates[2], coordinates[1]] 
    drawing.line(line_coordinates, fill=color, width=width) 

    #left 
    line_coordinates = [coordinates[0], coordinates[1], coordinates[0], coordinates[3]] 
    drawing.line(line_coordinates, fill=color, width=width) 

    #right 
    line_coordinates = [coordinates[2], coordinates[1], coordinates[2], coordinates[3]] 
    drawing.line(line_coordinates, fill=color, width=width) 

    #bottom 
    line_coordinates = [coordinates[0], coordinates[3], coordinates[2], coordinates[3]] 
    drawing.line(line_coordinates, fill=color, width=width) 

cevap

5

PIL en rectanglewidth argüman desteklemez.

Etrafa oynamak için verimsiz bir yöntem iyi yazmış - ama not, çizgi genişliği sınırı boyunca merkezli değil olduğunu.

def draw_rectangle(draw, coordinates, color, width=1): 
    for i in range(width): 
     rect_start = (coordinates[0][0] - i, coordinates[0][1] - i) 
     rect_end = (coordinates[1][0] + i, coordinates[1][1] + i) 
     draw.rectangle((rect_start, rect_end), outline = color) 

# example usage 

im = Image.open(image_path) 
drawing = ImageDraw.Draw(im) 

top_left = (50, 50) 
bottom_right = (100, 100) 

outline_width = 10 
outline_color = "black" 

draw_rectangle(drawing, (top_left, bottom_right), color=outline_color, width=outline_width) 
0

Bir görünümü çizebilirsiniz örneğin rects: ilmik ve işlevinde neden

draw.rectangle([(x, y),(x+w,y+h) ], outline=(0,0,255,255)) 
draw.rectangle([(x+1, y+1),(x+w-1,y+h-1) ], outline=(0,0,255,255)) 
draw.rectangle([(x+2, y+2),(x+w-2,y+h-2) ], outline=(0,0,255,255)) 
... 

.