def makeCollage( listFiles = [], *args):


    # List of input files.
    infiles = listFiles
    debug('Found %s input files.' % len(infiles))
	
    print infiles
	
    # Create canvas.
    tile_count = len(infiles) + settings.TILE_OFFSET
    COLS = settings.COLS
    ROWS = tile_count // COLS + (1 if tile_count % COLS else 0)
    imgsize = (2 * settings.PADDING + settings.TILE_SIZE[0] * COLS +
               settings.GAP * (COLS - 1),
               2 * settings.PADDING + settings.TILE_SIZE[1] * ROWS +
               settings.GAP * (ROWS - 1))
    img = Image.new('RGB', imgsize, settings.BGCOLOR)
    debug('Creating a grid with %s columns and %s rows.' % (COLS, ROWS))

	
    imgno = 0
    for tile_file in infiles:
        debug('Processing %s...' % tile_file)

        # Tile position.
        pos = imgno + settings.TILE_OFFSET
        x = pos % COLS
        y = pos // COLS
        # Offsets.
        xoff = settings.PADDING + x * (settings.TILE_SIZE[0] + settings.GAP)
        yoff = settings.PADDING + y * (settings.TILE_SIZE[1] + settings.GAP)

        tile = Image.open(tile_file)

        # Resize image if necessary
        if settings.RESIZE and tile.size != settings.TILE_SIZE:
            w_from, h_from = tile.size
            if (w_from / float(h_from) >
                settings.TILE_SIZE[0] / float(settings.TILE_SIZE[1])):
                w_to = settings.TILE_SIZE[0]
                h_to = int(w_to / float(w_from) * h_from)
            else:
                h_to = settings.TILE_SIZE[1]
                w_to = int(h_to / float(h_from) * w_from)
            tile = tile.resize((w_to, h_to), Image.ANTIALIAS)

        # Place tile on canvas.
        img.paste(tile, (xoff, yoff))
		

        imgno += 1

    # Post-process image.
    settings.post_process(img)

    # Save output file.
    debug('Writing output file: %s' % settings.OUTPUT_FILE)
    img.save(settings.OUTPUT_FILE, quality=95)
Example #2
0
def main():
    # List of input files.
    infiles = glob.glob(os.path.join(options.INPUT_DIR, '*.jpg'))
    debug('Found %s input files.' % len(infiles))

    # Create canvas.
    tile_count = len(infiles) + settings.TILE_OFFSET
    COLS = settings.COLS
    ROWS = tile_count // COLS + (1 if tile_count % COLS else 0)
    imgsize = (2 * settings.PADDING + settings.TILE_SIZE[0] * COLS +
               settings.GAP * (COLS - 1),
               2 * settings.PADDING + settings.TILE_SIZE[1] * ROWS +
               settings.GAP * (ROWS - 1))
    img = Image.new('RGB', imgsize, settings.BGCOLOR)
    debug('Creating a grid with %s columns and %s rows.' % (COLS, ROWS))

    # Initialize writing.
    if settings.WRITE:
        font = ImageFont.truetype(settings.FONT_FILE, settings.FONT_SIZE)

    imgno = 0
    for tile_file in infiles:
        debug('Processing %s...' % tile_file)

        # Tile position.
        pos = imgno + settings.TILE_OFFSET
        x = pos % COLS
        y = pos // COLS
        # Offsets.
        xoff = settings.PADDING + x * (settings.TILE_SIZE[0] + settings.GAP)
        yoff = settings.PADDING + y * (settings.TILE_SIZE[1] + settings.GAP)

        tile = Image.open(tile_file)

        # Resize image if necessary!
        if settings.RESIZE and tile.size != settings.TILE_SIZE:
            w_from, h_from = tile.size
            if (w_from / float(h_from) >
                settings.TILE_SIZE[0] / float(settings.TILE_SIZE[1])):
                w_to = settings.TILE_SIZE[0]
                h_to = int(w_to / float(w_from) * h_from)
            else:
                h_to = settings.TILE_SIZE[1]
                w_to = int(h_to / float(h_from) * w_from)
            tile = tile.resize((w_to, h_to), Image.ANTIALIAS)

        # Place tile on canvas.
        img.paste(tile, (xoff, yoff))

        # Write a number on the image, if desired.
        if settings.WRITE:
            draw = ImageDraw.Draw(img)
            txt = settings.write_text(imgno)

            # Calculate offsets.
            txtsize = draw.textsize(txt, font=font)
            font_xoff = (xoff + settings.TILE_SIZE[0] - txtsize[0] -
                         settings.FONT_PADDING)
            font_yoff = (yoff + settings.TILE_SIZE[1] - txtsize[1] -
                         settings.FONT_PADDING)

            # Finally, draw the number.
            draw.text((font_xoff, font_yoff), txt, font=font,
                      fill=settings.FONT_COLOR)
            del draw

        imgno += 1

    # Post-process image.
    settings.post_process(img)

    # Save output file.
    debug('Writing output file: %s' % options.OUTPUT_FILE)
    img.save(options.OUTPUT_FILE, quality=95)
Example #3
0
def main():
    # List of input files.
    infiles = options.files if options.files is not None else glob.glob(os.path.join(options.INPUT_DIR, '*.jpg'))
    debug('Found %s input files.' % len(infiles))

    # Create canvas.
    tile_count = len(infiles) + settings.TILE_OFFSET
    COLS = settings.COLS
    ROWS = tile_count // COLS + (1 if tile_count % COLS else 0)
    imgsize = (2 * settings.PADDING + settings.TILE_SIZE[0] * COLS +
               settings.GAP * (COLS - 1),
               2 * settings.PADDING + settings.TILE_SIZE[1] * ROWS +
               settings.GAP * (ROWS - 1))
    img = Image.new('RGB', imgsize, settings.BGCOLOR)
    debug('Creating a grid with %s columns and %s rows.' % (COLS, ROWS))

    # Initialize writing.
    if settings.WRITE:
        font = ImageFont.truetype(settings.FONT_FILE, settings.FONT_SIZE)

    imgno = 0
    for tile_file in infiles:
        debug('Processing %s...' % tile_file)

        # Tile position.
        pos = imgno + settings.TILE_OFFSET
        x = pos % COLS
        y = pos // COLS
        # Offsets.
        xoff = settings.PADDING + x * (settings.TILE_SIZE[0] + settings.GAP)
        yoff = settings.PADDING + y * (settings.TILE_SIZE[1] + settings.GAP)

        tile = Image.open(tile_file)

        # Resize image if necessary!
        if settings.RESIZE and tile.size != settings.TILE_SIZE:
            w_from, h_from = tile.size
            if (w_from / float(h_from) >
                settings.TILE_SIZE[0] / float(settings.TILE_SIZE[1])):
                w_to = settings.TILE_SIZE[0]
                h_to = int(w_to / float(w_from) * h_from)
            else:
                h_to = settings.TILE_SIZE[1]
                w_to = int(h_to / float(h_from) * w_from)
            tile = tile.resize((w_to, h_to), Image.ANTIALIAS)

        # Place tile on canvas.
        img.paste(tile, (xoff, yoff))

        # Write a number on the image, if desired.
        if settings.WRITE:
            draw = ImageDraw.Draw(img)
            txt = settings.write_text(imgno)

            # Calculate offsets.
            txtsize = draw.textsize(txt, font=font)
            font_xoff = (xoff + settings.TILE_SIZE[0] - txtsize[0] -
                         settings.FONT_PADDING)
            font_yoff = (yoff + settings.TILE_SIZE[1] - txtsize[1] -
                         settings.FONT_PADDING)

            # Finally, draw the number.
            draw.text((font_xoff, font_yoff), txt, font=font,
                      fill=settings.FONT_COLOR)
            del draw

        imgno += 1

    # Post-process image.
    settings.post_process(img)

    # Save output file.
    debug('Writing output file: %s' % options.OUTPUT_FILE)
    img.save(options.OUTPUT_FILE, quality=options.OUTPUT_QUALITY)