def _draw_striped_meter(self, draw: ImageDraw.Draw): """Draw a striped meter""" meter_value = self._meter_value() x1 = y1 = self._metersize * M - 20 width = self._meterthickness * M if self._wedgesize > 0: draw.arc( xy=(0, 0, x1, y1), start=meter_value - self._wedgesize, end=meter_value + self._wedgesize, fill=self._meterforeground, width=width, ) else: _from = self._arcoffset _to = meter_value - 1 _step = self._stripethickness for x in range(_from, _to, _step): draw.arc( xy=(0, 0, x1, y1), start=x, end=x + self._stripethickness - 1, fill=self._meterforeground, width=width, )
def _draw_solid_meter(self, draw: ImageDraw.Draw): """Draw a solid meter""" x1 = y1 = self._metersize * M - 20 width = self._meterthickness * M if self._wedgesize > 0: meter_value = self._meter_value() draw.arc( xy=(0, 0, x1, y1), start=meter_value - self._wedgesize, end=meter_value + self._wedgesize, fill=self._meterforeground, width=width, ) else: draw.arc( xy=(0, 0, x1, y1), start=self._arcoffset, end=self._meter_value(), fill=self._meterforeground, width=width, )
def rectangle_to_vinyle(np_img): """Convert lines into circles, from left=in to right=out (7min/img)""" min_radius = np_img.shape[1] // 2 max_radius = np_img.shape[1] + min_radius side_length = max_radius * 2 pil_circle = Image.new('RGB', (side_length, side_length), color='white') drawer = Draw(pil_circle, mode='RGB') degree_step = 180.0 / np_img.shape[0] #angle is 0 at 3 o'clock, increasing clockwise get_angle = lambda x: 270 - x * degree_step for i, col in tqdm(enumerate(np.transpose(np_img, axes=[1,0,2])), total=np_img.shape[1]): x0 = side_length // 2 - min_radius - i x1 = side_length // 2 + min_radius + i for j, pixel in enumerate(col): drawer.arc([x0, x0, x1, x1], get_angle(j+1), get_angle(j), tuple(pixel), 2) drawer.arc([x0, x0, x1, x1], get_angle(-j), get_angle(-j-1), tuple(pixel), 2) return pil_circle