Пример #1
0
def main():
    """ Main function. """

    try:
        cv = Canvas(8, 2)
    except CanvasError as err:
        sys.stderr.write("%s\n" % err)
        sys.exit(127)

    cv.set_color_ansi(caca.COLOR_WHITE, caca.COLOR_BLACK)
    cv.put_str(0, 0, "ABcde")
    cv.set_color_ansi(caca.COLOR_LIGHTRED, caca.COLOR_BLACK)
    cv.put_str(5, 0, "\\o/")
    cv.set_color_ansi(caca.COLOR_WHITE, caca.COLOR_BLUE)
    cv.put_str(0, 1, "&$âøÿØ?!")

    fonts = caca.get_font_list()
    if not fonts:
        sys.stderr.write("libcaca was compiled without any fonts\n")
        sys.exit(127)

    try:
        f = Font(fonts[0])
    except FontError as err:
        sys.stderr.write("%s\n" % err)
        sys.exit(127)

    w = cv.get_width() * f.get_width()
    h = cv.get_height() * f.get_height()
    buf = ctypes.c_buffer(4 * w * h)

    cv.render(f, buf, w, h, 4 * w)

    cv.set_size(80, 32)
    try:
        dp = Display(cv)
    except DisplayError as err:
        sys.stderr.write("%s\n" % err)
        sys.exit(127)

    try:
        if sys.byteorder == 'big':
            dit = Dither(32, w, h, 4 * w, 0xff0000, 0xff00, 0xff, 0xff000000)
        else:
            dit = Dither(32, w, h, 4 * w, 0xff00, 0xff0000, 0xff000000, 0xff)

        dit.bitmap(cv, 0, 0, cv.get_width(), cv.get_height(), buf)
    except DitherError as err:
        sys.stderr.write("%s\n" % err)
        sys.exit(127)
    else:
        dp.refresh()

    dp.get_event(caca.EVENT_KEY_PRESS, Event(), -1)
Пример #2
0
    def __init__(self, settings):
        red, green, blue, alpha = settings.masks
        self.dit = Dither(settings.bpp, settings.img_size[0],
                          settings.img_size[1],
                          settings.depth * settings.img_size[0], red, green,
                          blue, alpha)
        self.dit.set_algorithm(settings.dither.encode('ascii'))
        self.dit.set_charset(b"utf8")

        self.canvas = Canvas(settings.text_size[0], settings.text_size[1])
        self.canvas.set_color_ansi(caca.COLOR_DEFAULT, caca.COLOR_TRANSPARENT)

        self.settings = settings
        self._buffer = bytearray([0] * (bpc * self.settings.total_chars))

        caca_lib.caca_get_canvas_attrs.argtypes = [caca.canvas._Canvas]
        caca_lib.caca_get_canvas_attrs.restype = ctypes.POINTER(
            ctypes.c_uint32 * settings.total_chars)
        caca_lib.caca_get_canvas_chars.argtypes = [caca.canvas._Canvas]
        caca_lib.caca_get_canvas_chars.restype = ctypes.POINTER(
            (ctypes.c_uint8 * 4) * settings.total_chars)
Пример #3
0
        sys.stderr.write("%s\n" % err)
        sys.exit(127)

    cv.set_color_ansi(caca.COLOR_DEFAULT, caca.COLOR_TRANSPARENT)

    #init dither
    try:
        #convert rgb to rgba
        if img.mode == 'RGB':
            img = img.convert('RGBA')
        #reorder rgba
        if img.mode == 'RGBA':
            r, g, b, a = img.split()
            img = Image.merge("RGBA", (b, g, r, a))

        dit = Dither(BPP, img.size[0], img.size[1], DEPTH * img.size[0],
                        RMASK, GMASK, BMASK, AMASK)
    except DitherError, err:
        sys.stderr.write("%s\n" % err)
        sys.exit(127)

    #set dither algorithm
    if ditalgo:
        dit.set_algorithm(ditalgo)

    #set brightness
    if brightness:
        dit.set_brightness(brightness)

    #set gamma
    if gamma:
        dit.set_gamma(gamma)
def asciiart(img, SC, GCF):
    img = cv2.convertScaleAbs(img, alpha=GCF, beta=0)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    img = Image.fromarray(img)

    RMASK = 0x00ff0000
    GMASK = 0x0000ff00
    BMASK = 0x000000ff
    AMASK = 0xff000000
    BPP = 32
    DEPTH = 4

    brightness = None
    contrast = None
    gamma = None
    ditalgo = None
    exformat = "svg"
    charset = None

    width = int(img.size[1] * 2.23 * SC)
    height = int(img.size[0] * 0.75 * SC)

    cv = Canvas(width, height)
    cv.set_color_ansi(caca.COLOR_DEFAULT, caca.COLOR_TRANSPARENT)

    try:
        # convert rgb to rgba
        if img.mode == 'RGB':
            img = img.convert('RGBA')
        # reorder rgba
        if img.mode == 'RGBA':
            r, g, b, a = img.split()
            img = Image.merge("RGBA", (b, g, r, a))
        dit = Dither(BPP, img.size[0], img.size[1], DEPTH * img.size[0], RMASK,
                     GMASK, BMASK, AMASK)
    except DitherError as err:
        print(err)

    if ditalgo:
        dit.set_algorithm(ditalgo)

    # set brightness
    if brightness:
        dit.set_brightness(brightness)

    # set gamma
    if gamma:
        dit.set_gamma(gamma)

    # set contrast
    if contrast:
        dit.set_contrast(contrast)

    # set charset
    if charset:
        dit.set_charset(charset)

    #create dither
    dit.bitmap(cv, 0, 0, width, height, img.tobytes())

    asciiArt = cv.export_to_memory(exformat)

    ##############################################################

    bgcolor = 'white'

    font = ImageFont.truetype("DejaVuSansMono.ttf", 11)

    #letter_width = font.getsize("X")[0]
    letter_height = font.getsize("X")[1]

    lines = asciiArt.split('\n')

    canvasHeight = int(lines[1].split('"')[3])
    canvasWidth = int(lines[1].split('"')[1])

    newImg = Image.new("RGB", (canvasWidth, canvasHeight), bgcolor)
    draw = ImageDraw.Draw(newImg)

    for char in lines[3:-3]:
        type = char.split('"')[0].split(" ")[0][1:]

        x = int(char.split('"')[3])
        y = int(char.split('"')[5])
        color = char.split('"')[1].split(":")[1]
        if type == "text":
            character = str(char.split('"')[-1][1:2])
            draw.text((x, y - letter_height), character, color, font=font)
        else:
            rectWidth = int(char.split('"')[-4])
            rectheight = int(char.split('"')[-2])
            draw.rectangle(((x, y), (x + rectWidth, y + rectheight)),
                           fill=color)

    finalImg = np.asarray(newImg)
    finalImg = cv2.cvtColor(finalImg, cv2.COLOR_BGR2RGB)
    return finalImg