Ejemplo n.º 1
0
def mapdraw(args,colorbar):
   img = Image.new('RGB',(args['xlen'],args['ylen']),'white')
   draw = Draw(img)

   for key,value in args['datamap'].iteritems():
      draw.point(value,getrgb(str(key)))

   img2 = img.resize((args['y'],args['y']), Image.BILINEAR)

   imgclr = colorbar.resize((args['colorbar'],img2.size[1]), Image.BILINEAR)

   # ===== ENTIRE IMAGE CREATION W/ TEXT=====
   imgbox = Image.new('RGB',((300+args['y']+args['colorbar']),(img2.size[1]+200)),args['background'])
   imgbox.paste(img2,(100,100))
   imgbox.paste(imgclr,((200+img2.size[0]),100))

   drawbox = Draw(imgbox)
   title = args['title']
   titlesize = 50 # future user input
   font = truetype("/library/fonts/Arial.ttf",titlesize)
   smfontsize = 30 # future user input
   smfont = truetype("/library/fonts/Arial.ttf",smfontsize)
   titlewidth = font.getsize(title)[0]
   drawbox.text(((imgbox.size[0]/2 - titlewidth/2), titlesize/2),title,(0,0,0),font=font)

   drawbox.text(((imgbox.size[0] - 95),100),str(args['max']),(0,0,0),font=smfont)
   drawbox.text(((imgbox.size[0] - 95),(100 + img2.size[1] - smfontsize)),str(args['min']),(0,0,0),font=smfont)

   imgbox.show()
   if 'title' in args:
      title = args['title']+'_'+str(args['min'])+'_'+str(args['max'])+'.png'
   else:
      title = 'output_'+str(args['min'])+'_'+str(args['max'])+'.png'
   imgbox.save(args['save']+'/'+title)
Ejemplo n.º 2
0
def postprocess_args(opts, args):
    """ Return inputfile, pointsfile, labelsfile, minutes, zoom, fonts after optparser.parse_args().
    """
    try:
        inputfiles = args[0:]
    except IndexError:
        raise OptParseError('Input filename is required.')
    
    for inputfile in inputfiles:
        if not exists(inputfile):
            raise OptParseError('Non-existent input filename: "%(inputfile)s".' % locals())

    minutes = opts.minutes

    if minutes <= 0:
        raise OptParseError('Minutes must be greater than 0: "%(minutes).1f".' % locals())
    
    fonts = {}
    
    fontfile, fontsize = opts.countryfont
    
    try:
        fontsize = int(fontsize)
    except ValueError:
        raise OptParseError('Bad font size for countries: "%(fontsize)s".' % locals())
    
    if not exists(fontfile):
        raise OptParseError('Non-existent font filename for counties: "%(fontfile)s".' % locals())
    
    fonts['country'] = truetype(fontfile, fontsize, encoding='unic')

    for opt in ('pop25mfont', 'pop250kfont', 'pop50kfont', 'popotherfont'):
        population = opt[3:-4]
        fontfile, fontsize = getattr(opts, opt)
        
        try:
            fontsize = int(fontsize)
        except ValueError:
            raise OptParseError('Bad font size for population %(population)s: "%(fontsize)s".' % locals())
        
        if not exists(fontfile):
            raise OptParseError('Non-existent font filename for population %(population)s: "%(fontfile)s".' % locals())
        
        fonts[population] = truetype(fontfile, fontsize, encoding='unic')
    
    zoom = opts.zoom
    countriesfile = opts.countries
    pointsfile = opts.points
    labelsfile = opts.labels
    
    return countriesfile, inputfiles, pointsfile, labelsfile, minutes, zoom, fonts
Ejemplo n.º 3
0
 def truefonts(self):
     if self._truefonts:
         return self._truefonts
     self._truefonts = tuple(
         [truetype(n, s) for n in self._fonts for s in self._font_sizes])
     """truetype returns a font object"""
     return self._truefonts
Ejemplo n.º 4
0
def load_font(font_path=FONT_PATH, font_size=FONT_SIZE):
    try:
        arial_font = truetype(font_path, font_size)
    except OSError:
        print(f"Cannot load font {font_path}")
        arial_font = None
    return arial_font
Ejemplo n.º 5
0
    def _populate_shapes(self):
        """ Set values for self._label_shapes, _footprint_shape, and others.
        """
        point = Point(self.position.x, self.position.y)
        point_buffered = point.buffer(self.radius + self.buffer, 3)
        self._point_shape = point.buffer(self.radius, 3)
        
        scale = 10.0
        font = truetype(self.fontfile, int(self.fontsize * scale), encoding='unic')

        x, y = self.position.x, self.position.y
        w, h = font.getsize(self.name)
        w, h = w/scale, h/scale
        
        for placement in placements:
            label_shape = point_label_bounds(x, y, w, h, self.radius, placement)
            mask_shape = label_shape.buffer(self.buffer, 2).union(point_buffered)
            
            self._label_shapes[placement] = label_shape
            self._mask_shapes[placement] = mask_shape
    
        unionize = lambda a, b: a.union(b)
        self._label_footprint = reduce(unionize, self._label_shapes.values())
        self._mask_footprint = reduce(unionize, self._mask_shapes.values())
        
        # number of pixels from the top of the label based on the bottom of a "."
        self._baseline = font.getmask('.').getbbox()[3] / scale
Ejemplo n.º 6
0
def _ensure_valid(
        fonts: List[Union[PathLike, str]]) -> List[Union[PathLike, str]]:
    """
    A "stupid" checker for fonts. DO NOT USE THIS FUNCTION YOURSELF!
    """
    [truetype(n, 50) for n in fonts]
    return fonts
Ejemplo n.º 7
0
def fit_text_in_area(width, height, text):
    safe_width = width * 0.9  # 10% border for cleanliness
    safe_height = height * 0.9
    font_path = os.path.join(settings.STATIC_ROOT, 'font', 'LiberationSans-Regular.ttf')
    size = 0
    font = truetype(filename=font_path, size=size)
    while not font.getsize(text=text)[0] > safe_width and not (font.getsize(text=text)[1] * 1.25) > safe_height:
        size += 1
        del font
        font = truetype(filename=font_path, size=size)
    size -= 1
    del font
    font = truetype(filename=font_path, size=size)
    left_border = (width - font.getsize(text=text)[0]) / 2
    top_border = height / 2 - font.getsize(text=text)[1]   # prefer border on bottom, due to text height inaccuracy
    return font, left_border, top_border
Ejemplo n.º 8
0
 def text(self, image, fonts, font_sizes=None, drawings=None, squeeze_factor=0.75, color=None):
     color = color if color else self._color
     fonts = tuple([truetype(name, size)
                    for name in fonts
                    for size in font_sizes or (65, 70, 75)])
     draw = Draw(image)
     char_images = []
     for c in self._text:
         font = random.choice(fonts)
         c_width, c_height = draw.textsize(c, font=font)
         char_image = Image.new('RGB', (c_width, c_height), (0, 0, 0))
         char_draw = Draw(char_image)
         char_draw.text((0, 0), c, font=font, fill=color)
         char_image = char_image.crop(char_image.getbbox())
         for drawing in drawings:
             d = getattr(self, drawing)
             char_image = d(char_image)
         char_images.append(char_image)
     width, height = image.size
     offset = int((width - sum(int(i.size[0] * squeeze_factor)
                               for i in char_images[:-1]) -
                   char_images[-1].size[0]) / 2)
     for char_image in char_images:
         c_width, c_height = char_image.size
         mask = char_image.convert('L').point(lambda i: i * 1.97)
         image.paste(char_image,
                     (offset, int((height - c_height) / 2)),
                     mask)
         offset += int(c_width * squeeze_factor)
     return image
Ejemplo n.º 9
0
    def create_noise_chars_using_mask(image, char, background, number):
        width, height = image.size
        font = truetype(random.choice(DEFAULT_FONTS), 30)
        draw = Draw(image)
        w, h = draw.textsize(char, font=font)

        x = random.randint(0, int(8 * width / 9))
        y = random.randint(0, int(7 * height / 10))

        while number:
            im = Image.new('RGBA', (w, h))

            color = random_color(10, 200, random.randint(220, 255))

            dx = 0
            dy = 0

            Draw(im).text((dx, dy), char, font=font, fill=color)
            Draw(im).text((dx + 1, dy + 1), char, font=font, fill=color)
            Draw(im).text((dx - 1, dy - 1), char, font=font, fill=color)

            im = im.rotate(random.uniform(-45, 45), Image.BILINEAR, expand=1)
            im = im.crop(im.getbbox())

            alpha = im.convert('RGBA').split()[-1]
            bg = Image.new("RGBA", im.size, background + (255, ))
            bg.paste(im, mask=alpha)
            im = bg
            # mask = im.convert('L').point(table)

            image.paste(im, (x, y))
            number -= 1

        return image
Ejemplo n.º 10
0
def make_pic(text):
    ttfont = truetype(font, font_size)  # 这里我之前使用Arial.ttf时不能打出中文,用华文细黑就可以
    image = Image.new(imgmode, imgsize, background)
    draw = Draw(image)

    images = []
    for c in text:
        images.append(_draw_character(c, draw, ttfont))
    #
    text_width = sum([im.size[0] for im in images])

    # width = max(text_width, imgsize[0])
    # image = image.resize((width, imgsize[1]))

    average = int(text_width / len(text))
    rand = int(0.25 * average)
    offset = int(average * 0.1)
    #

    for im in images:
        w, h = im.size
        if offset < 10:
            offset = 10

        offseth = int((imgsize[1] - h) / 2) + random.randint(-4, 4)

        image.paste(im, (offset, offseth))
        offset = offset + w + random.randint(-rand, 0)

    # create_noise_curve(image, color)
    # draw.text((10, 2), text, fill=color, font=ttfont)

    image.save('out5.png')
Ejemplo n.º 11
0
 def text(self, image, fonts, font_sizes=None, drawings=None, squeeze_factor=0.75, color=None):
     color = color if color else self._color
     fonts = tuple([truetype(name, size)
                    for name in fonts
                    for size in font_sizes or (65, 70, 75)])
     draw = Draw(image)
     char_images = []
     for c in self._text:
         font = random.choice(fonts)
         c_width, c_height = draw.textsize(c, font=font)
         char_image = Image.new('RGB', (c_width, c_height), (0, 0, 0))
         char_draw = Draw(char_image)
         char_draw.text((0, 0), c, font=font, fill=color)
         char_image = char_image.crop(char_image.getbbox())
         for drawing in drawings:
             d = getattr(self, drawing)
             char_image = d(char_image)
         char_images.append(char_image)
     width, height = image.size
     offset = int((width - sum(int(i.size[0] * squeeze_factor)
                               for i in char_images[:-1]) -
                   char_images[-1].size[0]) / 2)
     for char_image in char_images:
         c_width, c_height = char_image.size
         mask = char_image.convert('L').point(lambda i: i * 1.97)
         image.paste(char_image,
                     (offset, int((height - c_height) / 2)),
                     mask)
         offset += int(c_width * squeeze_factor)
     return image
Ejemplo n.º 12
0
    def create_noise_chars_using_mask(image, char, number):
        width, height = image.size
        font = truetype('../data/DroidSansMono.ttf', 30)
        draw = Draw(image)
        w, h = draw.textsize(char, font=font)

        x = random.randint(0, int(8 * width / 9))
        y = random.randint(0, int(7 * height / 10))

        while number:
            im = Image.new('RGBA', (w, h))

            color = random_color(10, 200, random.randint(220, 255))

            dx = 0
            dy = 0

            Draw(im).text((dx, dy), char, font=font, fill=color)
            Draw(im).text((dx + 1, dy + 1), char, font=font, fill=color)
            Draw(im).text((dx - 1, dy - 1), char, font=font, fill=color)

            im = im.rotate(random.uniform(-45, 45), Image.BILINEAR, expand=1)
            im = im.crop(im.getbbox())

            mask = im.convert('L').point(table)

            image.paste(im, (x, y), mask=mask)
            number -= 1

        return image
Ejemplo n.º 13
0
    def _populate_shapes(self):
        """ Set values for self._label_shapes, _footprint_shape, and others.
        """
        point = Point(self.position.x, self.position.y)
        point_buffered = point.buffer(self.radius + self.buffer, 3)
        self._point_shape = point.buffer(self.radius, 3)
        
        scale = 10.0
        font = truetype(self.fontfile, int(self.fontsize * scale), encoding='unic')

        x, y = self.position.x, self.position.y
        w, h = font.getsize(self.name)
        w, h = w/scale, h/scale
        
        for placement in placements:
            label_shape = point_label_bounds(x, y, w, h, self.radius, placement)
            mask_shape = label_shape.buffer(self.buffer, 2).union(point_buffered)
            
            self._label_shapes[placement] = label_shape
            self._mask_shapes[placement] = mask_shape
    
        unionize = lambda a, b: a.union(b)
        self._label_footprint = reduce(unionize, self._label_shapes.values())
        self._mask_footprint = reduce(unionize, self._mask_shapes.values())
        
        # number of pixels from the top of the label based on the bottom of a "."
        self._baseline = font.getmask('.').getbbox()[3] / scale
Ejemplo n.º 14
0
    def truefonts2(self):

        self._truefonts2 = tuple([
            truetype(n, random.randint(42,47))
            for n in self._fonts2
        ])
        return self._truefonts2
Ejemplo n.º 15
0
def text(fonts,
         font_sizes=None,
         drawings=None,
         color: Union[str, Callable] = '#5C87B2',
         squeeze_factor=0.8):
    """ 向验证码上写文字

    :param fonts: ttf 字体文件,Iterable
    :param font_sizes: 字体大小,Iterable

    真正的字体是 fonts 和 font_sizes 的笛卡尔积

    :param drawings: 文字变换(混淆)方法,每生成一个字母,所有 drawings 都会变换这个字母
    :param color: 文字颜色,或者是一个返回颜色的函数 (例如随机颜色)
    :param squeeze_factor: 挤压的比例,这个值越低,验证码重叠程度越高
    """

    fonts = tuple(
        truetype(name, size) for name in fonts
        for size in font_sizes or (65, 70, 75))
    if not callable(color):
        c = getrgb(color)

        def color():
            return c

    def drawer(image_, text_):
        draw = Draw(image_)
        char_images = []
        for c_ in text_:
            font = random.choice(fonts)
            c_width, c_height = draw.textsize(c_, font=font)
            # char_image = Image.new('RGB', (c_width, c_height), (0, 0, 0))
            o_width, o_height = font.getoffset(c_)
            char_image = Image.new(mode='RGB',
                                   size=(c_width + o_width,
                                         c_height + o_height),
                                   color=(0, 0, 0))
            char_draw = Draw(char_image)
            char_draw.text((0, 0), c_, font=font, fill=color())
            char_image = char_image.crop(char_image.getbbox())
            for drawing in drawings:
                char_image = drawing(char_image)
            char_images.append(char_image)
        width, height = image_.size
        offset_ = int(
            (width -
             sum(int(i.size[0] * squeeze_factor)
                 for i in char_images[:-1]) - char_images[-1].size[0]) / 2)
        # 将单个字符图像画在验证码上
        for char_image in char_images:
            c_width, c_height = char_image.size
            mask = char_image.convert('L').point(lambda i: i * 1.97)
            image_.paste(char_image, (offset_, int((height - c_height) / 2)),
                         mask)
            offset_ += int(c_width * squeeze_factor)
        return image_

    return drawer
Ejemplo n.º 16
0
 def __init__(self, text, font_path="msyh.ttc", font_size=14):
     self.font = truetype(font=font_path, size=font_size)
     self.width, self.height = self.get_danmu_size(text)
     self.height_range = [0, 720]
     self.width_range = [0, 1920]
     self.lines_start_y = list(range(*(self.height_range + [self.height])))
     self.lines_width_used = [[y, 0] for y in self.lines_start_y]
     self.contents = []
Ejemplo n.º 17
0
 def bold_italic(self, size=10, index=0, encoding="", layout_engine=None):
     if self.bold_italic_path is None:
         return None
     return truetype(font=self.bold_italic_path,
                     size=size,
                     index=index,
                     encoding=encoding,
                     layout_engine=layout_engine)
Ejemplo n.º 18
0
 def normal(self, size=10, index=0, encoding="", layout_engine=None):
     if self.normal_path is None:
         return None
     return truetype(font=self.normal_path,
                     size=size,
                     index=index,
                     encoding=encoding,
                     layout_engine=layout_engine)
Ejemplo n.º 19
0
 def truefonts(self):
     if self._truefonts:
         return self._truefonts
     self._truefonts = tuple([
         truetype(n, FONT_SIZE)
         for n in self._fonts
     ])
     """truetype returns a font object"""
     return self._truefonts
Ejemplo n.º 20
0
 def truefonts(self):
     if self._truefonts:
         return self._truefonts
     self._truefonts = tuple([
         truetype(n, s)
         for n in self._fonts
         for s in self._font_sizes
     ])
     return self._truefonts
Ejemplo n.º 21
0
 def truefonts(self):
     if self._truefonts:
         return self._truefonts
     self._truefonts = tuple([
         truetype(n, s)
         for n in self._fonts
         for s in self._font_sizes
     ])
     return self._truefonts
Ejemplo n.º 22
0
def get_font(path: str = "../resources/fonts/font.ttf",
             size: int = 36) -> FreeTypeFont:
    """
    Get the specified font.
    :param path: The path to the location of the font's TTF file.
    :param size: The size to use for the font.
    :return: The font.
    """
    return truetype(path, size)
Ejemplo n.º 23
0
def fit_text_in_area(width, height, text):
    safe_width = width * 0.9  # 10% border for cleanliness
    safe_height = height * 0.9
    font_path = os.path.join(settings.STATIC_ROOT, 'font',
                             'LiberationSans-Regular.ttf')
    size = 0
    font = truetype(filename=font_path, size=size)
    while not font.getsize(text=text)[0] > safe_width and not (
            font.getsize(text=text)[1] * 1.25) > safe_height:
        size += 1
        del font
        font = truetype(filename=font_path, size=size)
    size -= 1
    del font
    font = truetype(filename=font_path, size=size)
    left_border = (width - font.getsize(text=text)[0]) / 2
    top_border = height / 2 - font.getsize(
        text=text)[1]  # prefer border on bottom, due to text height inaccuracy
    return font, left_border, top_border
Ejemplo n.º 24
0
 def truefonts(self):
     #if self._truefonts:
     #    return self._truefonts
     self._truefonts = tuple([
         truetype(n, random.randint(45,55))
         #truetype(n, s)
         for n in self._fonts
         #for s in self._font_sizes
     ])
     return self._truefonts
Ejemplo n.º 25
0
 def __init__(self, sch, plat, dest, exp, call, op):
     self.sch = sch
     self.plat = plat
     self.dest = dest
     self.exp = exp
     self.call = call
     self.op = op
     self.colour = 'yellow'
     self.font = truetype(
         path.dirname(path.realpath(__file__)) + '/text.ttf', 14)
Ejemplo n.º 26
0
 def truefonts(self):
     """
     属性方法
     组合所有字体和字体大小
     """
     if self._truefonts:
         return self._truefonts
     self._truefonts = tuple(
         [truetype(n, s) for n in self._fonts for s in self._font_sizes])
     return self._truefonts
Ejemplo n.º 27
0
 def truefonts(self):
     #if self._truefonts:
     #    return self._truefonts
     self._truefonts = tuple([
         # truetype(n, random.randint(40,55))
         truetype(n, 35)  #字体大小
         for n in self._fonts
         #for s in self._font_sizes
     ])
     return self._truefonts
Ejemplo n.º 28
0
def image_4():
    current_time = strftime("%H:%M:%S", localtime())
    im = Image.new('RGB', (256, 64))
    draw = ImageDraw.Draw(im)
    draw.text((13, 14),
              current_time,
              fill='yellow',
              font=truetype(time_font, 50))
    with canvas(device, background=im) as draw:
        pass
Ejemplo n.º 29
0
    def text(self,
             fonts,
             font_sizes=None,
             drawings=None,
             color='#FFFFFF',
             squeeze_factor=0.5,
             border=2,
             b_color="#000000"):
        fonts = tuple([
            truetype(name, size) for name in fonts
            for size in font_sizes or (65, 70, 75)
        ])
        if not callable(color):
            c = getrgb(color)

            def color():
                return c

        if not callable(b_color):
            bc = getrgb(b_color)

            def b_color():
                return bc

        def drawer(image, text):
            draw = Draw(image)
            char_images = []
            for c in text:
                font = random.choice(fonts)
                c_width, c_height = draw.textsize(c, font=font)
                char_image = Image.new('RGBA', (c_width + 1, c_height + 1),
                                       "black")
                char_draw = Draw(char_image)
                self._outline(char_draw, 0, 0, c, font, "gray", border)
                char_draw.text((0, 0), c, font=font, fill="black")

                char_image = char_image.crop(char_image.getbbox())
                for drawing in drawings:
                    char_image = drawing(char_image)
                char_image = char_image.resize((char_image.width, 42))
                char_images.append(char_image)
            width, height = image.size
            offset = int((width - sum(
                int(i.size[0] * squeeze_factor)
                for i in char_images[:-1]) - char_images[-1].size[0]) / 2)
            for char_image in char_images:
                c_width, c_height = char_image.size
                mask = char_image.convert('L').point(lambda i: i * 1.97)
                image.paste(char_image, (offset, int((height - c_height) / 2)),
                            mask)
                offset += int(c_width * squeeze_factor)
            self._remove_white_background_with_chops(image)
            return image

        return drawer
Ejemplo n.º 30
0
def gen_img(font_name, font_size, text, img_size):
    font = truetype(font_name + ".ttf", font_size)
    print(font.getsize("By"))
    width, height = img_size

    img = new("1", (width, height), 255)
    drawing = Draw(img)
    drawing.text((10, 10), text, fill=0, font=font)
    img = img.convert("L")
    img = np.asarray(img, dtype=np.uint8)
    return img
Ejemplo n.º 31
0
def make_text(
        text: str,
        box=(0, 0),
        font_path='',
        init_font_size=76,
        color=(0, 0, 0, 255),
        stroke=None,  # stroke can be a color tuple
        align='left',
        emojis={},
        instance=''):
    if contains_emojis(text, emojis):
        # fancy rendering enabled
        # redirect to fit_text_with_emojis_in_box()
        return make_emoji_text(text,
                               emojis=emojis,
                               instance=instance,
                               box=box,
                               font_path=font_path,
                               color=color,
                               stroke=stroke,
                               align=align)

    canvas = Image.new('RGBA', box, color=(255, 255, 255, 0))
    draw = Draw(canvas)
    textsize = (box[0] + 1, box[1] + 1)
    font_size = init_font_size  # max font size is 72; decrease by 4 until fit
    while textsize[0] > box[0] or textsize[1] > box[1]:  # doesn't fit
        if 0 < font_size <= 16:
            font_size -= 1
        elif 16 < font_size < 32:
            font_size -= 2
        elif font_size >= 32:
            font_size -= 4
        else:
            break
        font = truetype(font_path, size=font_size)
        # try to fit in the horizontal boundary
        wrapped = wrap_text(text, box[0], font)
        textsize = draw.multiline_textsize(wrapped, font=font)
        # when wrapped text fits in box, loop will exit, and font is remembered

    draw.multiline_text(
        (0, 0),
        wrapped,
        fill=color if stroke is None else WHITE,
        font=font,
        stroke_fill=stroke,
        stroke_width=(max(font_size // 20, 2) if stroke is not None else 0),
        align=align)
    return canvas
Ejemplo n.º 32
0
    def create_noise_chars_without_mask(image, char, number):
        w, h = image.size
        font = truetype('../data/DroidSansMono.ttf', 30)
        draw = Draw(image)

        while number:
            x = random.randint(0, int(8 * w / 9))
            y = random.randint(0, int(7 * h / 10))

            color = random_color(10, 200, random.randint(220, 225))

            draw.text((x, y), char, fill=color, font=font)
            draw.text((x + 1, y + 1), char, fill=color, font=font)
            draw.text((x - 1, y - 1), char, fill=color, font=font)
            number -= 1

        return image
Ejemplo n.º 33
0
      async def write_text():
        if not len("".join(str(_) for _ in msg)) > line_limit:
          try:
            file_dir = "Assets\\PhilosophyImages"
            file = choice(
              [_ for _ in listdir(file_dir)
               if path.isfile(path.join(file_dir, _))])

            def center_text(image, text, color, font):
              draw = Draw(image)
              width, height = image.size
              text_width, text_height = draw.textsize(text, font)
              position = (
                (width - text_width) / 2 + 100,
                ((height - (text_height * 1.5)) / 2)
              )
              draw.text(position, text, color, font)
              image.save("Assets\\PhilosophyImages\\temporary.png")

            center_text(image=op_img(f"{file_dir}/{file}"),
                        text="\n".join(wrap(text=user_text, width=wrap_limit)),
                        color=(255, 255, 255),
                        font=truetype("times", 16))
            await message.channel.send(
              file=File(
                fp=open("Assets\\PhilosophyImages\\temporary.png", "rb")
              )
            )
          # No "attach_files" permission.
          except Forbidden:
            await message.channel.send(
              embed=Embed(
                title="Permissões insuficientes:",
                description="*Não tenho `attach_files` ativada no canal ou no "
                            "meu cargo*.",
                color=0xFFFF00
              )
            )
        else:
          await message.channel.send(
            embed=Embed(
              title="**Limite máximo atingido**",
              description="Você ultrapassou o limite de caracteres permitido.",
              color=0xFFFF00
            )
          )
Ejemplo n.º 34
0
    def create_noise_chars_without_mask(image, char, number):
        w, h = image.size
        font = truetype(random.choice(DEFAULT_FONTS), 30)
        draw = Draw(image)

        while number:
            x = random.randint(0, int(8 * w / 9))
            y = random.randint(0, int(7 * h / 10))

            color = random_color(120, 220, random.randint(20, 55))

            draw.text((x, y), char, fill=color, font=font)
            draw.text((x + 1, y + 1), char, fill=color, font=font)
            draw.text((x - 1, y - 1), char, fill=color, font=font)
            number -= 1

        return image
Ejemplo n.º 35
0
def image_3():
    scroller()
    current_time = strftime("%H:%M:%S", localtime())
    im = Image.new('RGB', (256, 64))
    draw = ImageDraw.Draw(im)
    draw.text((0, 0), '1st', fill='yellow', font=data[0].font)
    draw.text((30, 0),
              data[0].generate_card(),
              fill='yellow',
              font=data[0].font)
    draw.text((x, 15), data[0].call, fill='yellow', font=data[0].font)
    draw.text((92, 48),
              current_time,
              fill='yellow',
              font=truetype(time_font, 17))
    with canvas(device, background=im) as draw:
        pass
Ejemplo n.º 36
0
def draw_text(image, text, font_size):
    font = truetype(join(current_dir, 'static/font.ttf'), font_size)
    color = '#5C87B2'

    draw = Draw(image)
    char_images = []
    for ch in text:
        c_width, c_height = draw.textsize(ch, font=font)
        char_image = Image.new('RGB', (c_width, c_height), (0, 0, 0))
        char_draw = Draw(char_image)
        char_draw.text((0, 0), ch, font=font, fill=color)
        char_image = char_image.crop(char_image.getbbox())
        char_images.append(char_image)

    width, height = image.size
    total = len(char_images)
    for i, char_image in enumerate(char_images):
        c_width, c_height = char_image.size
        mask = char_image.convert('L').point(lambda i: i * 1.97)
        upper = int((height - c_height) / 2)
        left = int((width * (i + 1) / (total + 1)) - c_width / 2)
        image.paste(char_image, (left, upper), mask)
    return image
Ejemplo n.º 37
0
def captcha_text(fonts, font_sizes=None, drawings=None, color='#5C87B2',
                 squeeze_factor=0.8):
    fonts = tuple([truetype(name, size)
                   for name in fonts
                   for size in font_sizes or (65, 70, 75)])
    if not callable(color):
        c = getrgb(color)
        color = lambda: c

    def drawer(image, text):
        draw = Draw(image)
        char_images = []
        for c in text:
            font = random.choice(fonts)
            c_width, c_height = draw.textsize(c, font=font)
            c_height *= 2
            char_image = Image.new('RGB', (c_width, c_height), (0, 0, 0))
            char_draw = Draw(char_image)
            char_draw.text((0, 0), c, font=font, fill=color())
            char_image = char_image.crop(char_image.getbbox())
            for drawing in drawings:
                char_image = drawing(char_image)
            char_images.append(char_image)
        width, height = image.size
        offset = int((width - sum(int(i.size[0] * squeeze_factor)
                                  for i in char_images[:-1])
                      - char_images[-1].size[0]) / 2)
        for char_image in char_images:
            c_width, c_height = char_image.size
            mask = char_image.convert('L').point(lambda i: i * 1.97)
            image.paste(char_image,
                        (offset, int((height - c_height) / 2)),
                        mask)
            offset += int(c_width * squeeze_factor)
        return image
    return drawer
Ejemplo n.º 38
0
def map_gen(is_demo):
    cur_dir = os.path.dirname(os.path.realpath('__file__'))
    filename = os.path.join(cur_dir, 'data/map.png' if is_demo else '../data/map.png')
    image = Image.open(filename)

    width, height = image.size

    # левая верхняя точка
    lon_l = -122.51456
    lat_l = 37.81155

    # правая нижняя точка
    lon_r = -122.37173
    lat_r = 37.69238

    lx = lon2x(lon_l)
    ly = lat2y_m(lat_l)
    rx = lon2x(lon_r)
    ry = lat2y_m(lat_r)
    real_width = math.fabs(rx - lx)
    real_height = math.fabs(ry - ly)


    # широта долгота в точки на картинке
    def calc_on_map_point(lon, lat):
        px = lon2x(lon)
        py = lat2y_m(lat)

        # реальные точки, но относительно левого края картинки
        local_x = math.fabs(px - lx)
        local_y = math.fabs(py - ly)

        # точки на картинке (делим относительную точку на реальный размер и умножаем на размер картинки)
        img_x = (local_x / real_width) * width
        img_y = (local_y / real_height) * height
        return (img_x, img_y)


    rad = 2


    def point_to_ellipse(p):
        return p[0] - rad, p[1] - rad, p[0] + rad, p[1] + rad


    x = []  # longitudes
    y = []  # latitudes


    print("Загружаем датасет")
    df = load('data/train.csv.zip' if is_demo else '../data/train.csv.zip')
    print("Загружено")

    i = Image.new("RGBA", (width, height), 'white')
    d = ImageDraw.Draw(i, "RGBA")

    i.paste(image)
    # draw = ImageDraw.Draw(image, "RGBA")
    draw = d
    image = i


    def top_crimes(df, items=0):
        df.columns = df.columns.map(operator.methodcaller('lower'))
        by_col = df.groupby("category")
        col_freq = by_col.size()
        col_freq.index = col_freq.index.map(string.capwords)
        col_freq.sort(ascending=False, inplace=True)
        cols = [col for col in col_freq.index]
        cols = cols[0:1] + cols[3:]
        return cols[:items]


    print("Достаём топ-5 преступлений")
    top = top_crimes(df, items=5)

    opacity = 220
    # color_list = ['red', 'green', 'blue', 'purple', 'orange', 'pink', 'black', 'brown']
    color_list = [(255, 0, 0, opacity), (0, 255, 0, opacity), (0, 0, 255, opacity), (255, 127, 80, opacity),
                  (139, 0, 139, opacity), (255, 105, 180, opacity), (0, 0, 0, opacity),
                  (188, 143, 143, opacity)]

    colors_map = {top[i]: color_list[i] for i in range(len(top))}

    print("Начинаем рисовать на карте")
    length = df.shape[0]
    if is_demo:
        length = int(length * 0.15) #нарисуем 100,000 точек, вместо всех
    last_percent = -1
    for i in range(length):
        percent = int((i / length) * 100)
        if percent > last_percent:
            last_percent = percent
            print(str(percent) + "%")
            print(str(i) + " строка")
        first_row = df.ix[i]
        category = string.capwords(first_row["category"])
        if category in top:
            lon = first_row["x"]
            lat = first_row["y"]
            p = calc_on_map_point(lon, lat)
            color = colors_map[category]
            draw.ellipse(point_to_ellipse(p), fill=color, outline=color)


    # рисуем легенду


    lineheight = 35
    padding = 20
    space = 20
    legend_rad = 10
    font = truetype(font="times.ttf", size=15)
    legend_right = width / 3
    legend_down = (len(top)) * lineheight + padding
    draw.rectangle((0, 0, legend_right, legend_down), 'white', 'black')
    for i in range(len(top)):
        x = padding
        y = i * lineheight + padding
        category = top[i]
        color = colors_map[category]
        draw.ellipse((x, y, x + (2 * legend_rad), y + (2 * legend_rad)), fill=color, outline='black')
        draw.text((x + (2 * legend_rad) + space, y), translate(category, "en", "ru"), fill='black', font=font)

    image.save('test.png', 'PNG')
Ejemplo n.º 39
0
if __name__ == '__main__':
    parser = ArgumentParser(description="Extract glyph images from a font.")
    parser.add_argument('glyphset', choices=sets.keys(),
                        help="glyphs collection key")
    parser.add_argument('font', nargs='?', default='dejavu-serif',
                        help="path to a .ttf file")
    parser.add_argument('size', type=int, nargs='?', default=14,
                        help="font size")
    args = parser.parse_args()

    folder = join('glyphs', args.glyphset)
    try:
        mkdir(folder)
    except FileExistsError:
        pass

    try:
        args.font = fonts[args.font]
    except KeyError:
        pass
    font = truetype(args.font, args.size)

    available_characters = set(c[0] for t in TTFont(args.font)['cmap'].tables
                                    for c in t.cmap.items())
    characters = set(sets[args.glyphset]) & available_characters
    for character in characters:
        image = Image()._new(font.getmask(chr(character)))
        image.save(join(folder, '{}.png'.format(character)))
    print("Extracted {} glyphs".format(len(characters)))
Ejemplo n.º 40
0
    def grafh_to_image(self):

        #d.text((10, 10), "Hello World", fill=(0, 0, 0), font=f)

        ae = self.arestas_externas
        segmentos = []
        for k, v in ae.items():
            for a in v:
                segmentos.append(
                    [
                        0, list(ae.keys()).index(k),
                        0, list(ae.keys()).index(a)

                    ]
                )

        def cmp_to_key(mycmp):
            'Convert a cmp= function into a key= function'
            class K:
                def __init__(self, obj, *args):
                    self.obj = obj

                def __lt__(self, other):
                    return mycmp(self.obj, other.obj) < 0

                def __gt__(self, other):
                    return mycmp(self.obj, other.obj) > 0

                def __eq__(self, other):
                    return mycmp(self.obj, other.obj) == 0

                def __le__(self, other):
                    return mycmp(self.obj, other.obj) <= 0

                def __ge__(self, other):
                    return mycmp(self.obj, other.obj) >= 0

                def __ne__(self, other):
                    return mycmp(self.obj, other.obj) != 0
            return K

        def sort_seg(a, b):
            if a[3] - a[1] > b[3] - b[1]:
                return 1
            if a[3] - a[1] < b[3] - b[1]:
                return -1

            if a[1] > b[1]:
                return 1
            if a[1] < b[1]:
                return -1

            if a[3] > b[3]:
                return 1
            if a[3] < b[3]:
                return -1
            return 0
        print(segmentos)
        segmentos.sort(key=cmp_to_key(sort_seg))
        print(segmentos)

        """
        x_max = 0
        for p in seg:
            x = 0
            for pn in seg:
                if p == pn:
                    continue

                if pn[1] < p[3] and pn[3] > p[1] and pn[0] == p[0]:
                    x += 1
                    pn[0] = pn[2] = x

                    if x > x_max:
                        x_max = x"""

        ws = segmentos
        segmentos = [[]]
        while ws:
            s = ws.pop(0)
            for gs in segmentos:
                ok = True
                for i in gs:
                    ok = i[1] < s[1] and i[3] < s[1] or i[1] > s[3] and i[3] > s[3]
                    if not ok:
                        break

                if ok:
                    gs.append(s)
                    break
            if segmentos[-1]:
                segmentos.append([])

        x = 0
        seg = []
        for gs in segmentos:
            for s in gs:
                s[0] = x
                s[2] = x
                seg.append(s)
            x += 1
        x_max = x
        my = 50
        mx = 80

        x = mx
        y = my
        r = 5
        dx = 50
        dy = 10
        img = Image.new('RGB', (x_max * dx * 2 + mx, len(self.graph) * 50),
                        color=(255, 255, 255))

        f = truetype(
            font='/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf',
            size=15)
        d = ImageDraw.Draw(img)

        pos = 0
        for node, value in self.graph.items():
            d.ellipse((x - r, y - r, x + r, y + r), fill=(0, 0, 0, 255))
            d.text((20, y - r), str(node), fill=(0, 0, 0), font=f)
            #d.text((mx, y + r), str(pos), fill=(0, 0, 0), font=f)
            y += 50 - dy
            pos += 1

        for p in seg:
            y = my - dy
            pv = (
                p[0] * dx + mx + dx,
                p[1] * y + y + 2 * r,
                p[2] * dx + mx + dx,
                p[3] * y + y + 2 * r  # - p[0] * r * 4
            )
            ph1 = (
                mx,
                p[1] * y + y + 2 * r,
                p[0] * dx + mx + dx,
                p[1] * y + y + 2 * r,
            )

            ph2 = (
                mx,
                p[3] * y + y + 2 * r,
                p[2] * dx + mx + dx,
                p[3] * y + y + 2 * r  # - p[0] * r * 4,
            )

            d.line(ph1, fill=128, width=1)
            d.line(pv, fill=128, width=1)
            d.line(ph2, fill=128, width=1)

        img.save("/home/leandro/teste.png")
Ejemplo n.º 41
0
label = args.label[0].decode('utf-8')
if args.name:
    filename = args.name
else:
    filename = 'button-small-%s.png' % label.lower().replace(' ', '-')

# Hintergrund zusammenbauen
gradients = Image.open('generate-button-small.png')
y = 0
height = 23
background = gradients.crop((0, y, 200, height))
right = gradients.crop((203, 0, 208, height))

# Font laden und rausbekommen, wie gross der Button werden muss
ttf = '/Library/Fonts/Arial Narrow Bold.ttf'
font = truetype(ttf, 12, encoding='unic')
text_width, _ = font.getsize(label)
width = text_width + 2 * args.padding

# jetzt den Hintergrund in den Button reinkopieren
button = Image.new('RGBA', (width, height * 2))
button.paste(background, (0, 0))
button.paste(flip(background), (0, height))
button.paste(right, (width-5, 0))
button.paste(flip(right), (width-5, height))

# dann die Beschriftung reinmalen
draw = Draw(button)
draw.text((args.padding, 0+3), label, font=font, fill=args.text_color)
draw.text((args.padding, 23+4), label, font=font, fill=args.text_color)
Ejemplo n.º 42
0
def annotate(image, text):
    draw = ImageDraw(image)
    font = truetype("Helvetica.otf", 16)
    draw.text((0, 0), text, (255, 255, 255), font=font)