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