1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 """
41
42 Example code to draw 10 ellipses randomly on an image.
43
44 import ROI_utils;
45 import ROIDrawingUtils;
46 from random import randint;
47
48 l = [];
49 for i in range(0,10):
50 e = ROI_utils.EllipseData(ROI_utils.ROICoordinate(), randint(100, 300), randint(100, 300), randint(20, 50), randint(20, 50))
51 l.append(e);
52 d = ROIDrawingUtils.DrawingCanvas();
53 d.createImage(400,400)
54 v = d.drawElements(l);
55 d.image.show()
56
57
58 Example code to draw a polyline on an image an display it in PIL.
59
60 try:
61 from PIL import Image, ImageDraw # see ticket:2597
62 except ImportError:
63 import Image, ImageDraw # see ticket:2597
64
65 import ROI_utils
66 import ROIDrawingUtils
67
68 drawingCanvas = ROIDrawingUtils.DrawingCanvas();
69 points = [10,30, 40, 80, 100, 150]
70 polygonData = ROI_utils.PolylineData(ROI_utils.ROICoordinate(), points);
71 drawingCanvas.createImage(400,400);
72 drawingCanvas.drawElements([polygonData]);
73 drawingCanvas.image.show()
74
75
76 """
77
78
79 try:
80 from PIL import Image, ImageDraw
81 except ImportError:
82 import Image, ImageDraw
83
84
85
86
87
88
89
90
91
92
94
95
96
97
99 self.width = 0;
100 self.height = 0;
101 self.image = None;
102 self.draw = None;
103
104
105
106
107
109 self.image = Image.new('RGBA', (width, height), (0, 0, 0, 0));
110 self.width = width;
111 self.height = height;
112
113
114
115
116
117
118 - def setImage(self, image, width, height):
119 self.image = image;
120 self.width = width;
121 self.height = height;
122
123
124
125
127 if(self.draw == None):
128 self.draw = ImageDraw.Draw(self.image);
129 for element in elementList:
130 element.acceptVisitor(self);
131 return self.image;
132
133
134
135
136
138 return shapeSettings[1][0];
139
140
141
142
143
145 return shapeSettings[0][0];
146
147
148
149
150
152 return shapeSettings[0][1];
153
154
155
156
157
158
159
160
161
162 - def drawEllipse(self, cx, cy, rx, ry, shapeSettings, affineTransform = None):
163 x = cx-rx;
164 y = cy-ry;
165 w = x+rx*2;
166 h = y+ry*2;
167 fillColour = self.getFillColour(shapeSettings);
168 strokeColour = self.getStrokeColour(shapeSettings);
169 strokeWidth = self.getStrokeWidth(shapeSettings);
170 self.draw.ellipse((x,y,w,h), fill = fillColour, outline = strokeColour);
171
172
173
174
175
176
177
178
179
180 - def drawRectangle(self, x, y, w, h, shapeSettings, affineTransform = None):
181 fillColour = self.getFillColour(shapeSettings);
182 strokeColour = self.getStrokeColour(shapeSettings);
183 strokeWidth = self.getStrokeWidth(shapeSettings);
184 if(affineTransform==None):
185 self.draw.rectangle((x,y,w,h), fill = fillColour, outline = strokeColour);
186 else:
187 im = Image.new('RGBA', (self.width, self.height), (0, 0, 0, 0));
188 newDraw = ImageDraw.Draw(im);
189 newDraw.rectangle((x,y,w,h), fill = fillColour, outline = strokeColour);
190 newImage = im.transform((self.width,self.height), Image.AFFINE, affineTransform);
191 self.image.paste(newImage);
192
193
194
195
196
197
198
199 - def drawPolygon(self, pointTupleList, shapeSettings, affineTransform = None):
200 fillColour = self.getFillColour(shapeSettings);
201 strokeColour = self.getStrokeColour(shapeSettings);
202 strokeWidth = self.getStrokeWidth(shapeSettings);
203 if(affineTransform==None):
204 self.draw.polygon(pointTupleList, fill = fillColour, outline = strokeColour);
205 else:
206 im = Image.new('RGBA', (self.width, self.height), (0, 0, 0, 0));
207 newDraw = ImageDraw.Draw(im);
208 self.draw.polygon(pointTupleList, fill = fillColour, outline = strokeColour);
209 newImage = im.transform((self.width,self.height), Image.AFFINE, affineTransform);
210 self.image.paste(newImage);
211
212
213
214
215
216
217
218
219
220 - def drawLine(self, x1, y1, x2, y2, shapeSettings, affineTransform = None):
221 fillColour = self.getFillColour(shapeSettings);
222 strokeColour = self.getStrokeColour(shapeSettings);
223 strokeWidth = self.getStrokeWidth(shapeSettings);
224 if(affineTransform==None):
225 self.draw.line([(x1, y1), (x2, y2)], fill = strokeColour, width = strokeWidth);
226 else:
227 im = Image.new('RGBA', (self.width, self.height), (0, 0, 0, 0));
228 newDraw = ImageDraw.Draw(im);
229 self.draw.line([(x1, y1), (x2, y2)], fill = strokeColour, width = strokeWidth);
230 newImage = im.transform((self.width,self.height), Image.AFFINE, affineTransform);
231 self.image.paste(newImage);
232
233
234
235
236
237
238 - def drawPolyline(self, pointTupleList, shapeSettings, affineTransform = None):
239 fillColour = self.getFillColour(shapeSettings);
240 strokeColour = self.getStrokeColour(shapeSettings);
241 strokeWidth = self.getStrokeWidth(shapeSettings);
242 if(affineTransform==None):
243 self.draw.line(pointTupleList, fill = fillColour, width = strokeWidth);
244 else:
245 im = Image.new('RGBA', (self.width, self.height), (0, 0, 0, 0));
246 newDraw = ImageDraw.Draw(im);
247 self.draw.line(pointTupleList, fill = strokeColour, width = strokeColour);
248 newImage = im.transform((self.width,self.height), Image.AFFINE, affineTransform);
249 self.image.paste(newImage);
250
251
252
253
254
255
256
257
258
259
260 - def drawMask(self, x, y, width, height, bytes, shapeSettings, affineTransform = None):
261 fillColour = self.getFillColour(shapeSettings);
262 mask = Image.fromstring('1', (width, height), bytes);
263 if(affineTransform==None):
264 self.draw.bitmap(x, y, mask, fill = fillColour);
265 else:
266 im = Image.new('RGBA', (self.width, self.height), (0, 0, 0, 0));
267 newDraw = ImageDraw.Draw(im);
268 self.draw.bitmap(x, y, mask, fill = fillColour);
269 newImage = im.transform((self.width,self.height), Image.AFFINE, affineTransform);
270 self.image.paste(newImage);
271
272
273
274
275
276
277
278
279 - def drawText(self, x, y, text, shapeSettings, affineTransform = None):
280 textColour = self.getStrokeColour(shapeSettings);
281 if(affineTransform==None):
282 self.draw.text((x, y), text, fill = textColour);
283 else:
284 im = Image.new('RGBA', (self.width, self.height), (0, 0, 0, 0));
285 newDraw = ImageDraw.Draw(im);
286 self.draw.text((x, y), text, fill = textColour);
287 newImage = im.transform((self.width,self.height), Image.AFFINE, affineTransform);
288 self.image.paste(newImage);
289