Commit 0257e4a1 authored by narugo1992's avatar narugo1992
Browse files

doc(narugo): add documentation for new methods

parent 0f34b522
Loading
Loading
Loading
Loading
+36 −2
Original line number Diff line number Diff line
from typing import Tuple
from typing import Tuple, List

import matplotlib.pyplot as plt
from PIL import Image

from imgutils.data import load_image, grid_transparent
from imgutils.data import load_image, grid_transparent, ImageTyping
from imgutils.validate.truncate import _mock_load_truncated_images

INCHES_TO_PIXELS = 96


def _image_input_process(img) -> Tuple[Image.Image, str]:
    if isinstance(img, tuple):
@@ -45,3 +47,35 @@ def image_plot(*images, save_as: str, columns=2, keep_axis: bool = False, figsiz
        ax.axis('off')

    plt.savefig(save_as, bbox_inches='tight', pad_inches=0.1, dpi=300, transparent=True)


@_mock_load_truncated_images(True)
def image_table(images: List[List[ImageTyping]], columns: List[str], rows: List[str], save_as: str,
                keep_axis: bool = False, figsize=(720, 600), dpi: int = 300, fontsize: int = 18, padsize: int = 5):
    plt.cla()
    plt.tight_layout()

    assert images, 'No less than 1 images required.'
    fig, axs = plt.subplots(len(rows), len(columns),
                            figsize=(figsize[0] / INCHES_TO_PIXELS, figsize[1] / INCHES_TO_PIXELS))
    plt.subplots_adjust(wspace=padsize / INCHES_TO_PIXELS, hspace=padsize / INCHES_TO_PIXELS)
    for xi in range(len(rows)):
        for yi in range(len(columns)):
            img = images[xi][yi]
            ax = axs[yi] if len(rows) == 1 else axs[xi, yi]
            if img:
                image = load_image(img, force_background=None)
                ax.imshow(grid_transparent(image))
                if not keep_axis:
                    ax.set_xticks([])
                    ax.set_yticks([])
            else:
                ax.set_xticks([])
                ax.set_yticks([])

            if xi == 0:
                ax.set_title(columns[yi], fontsize=fontsize)
            if yi == 0:
                ax.set_ylabel(rows[xi], fontsize=fontsize)

    plt.savefig(save_as, bbox_inches='tight', pad_inches=0.02, dpi=dpi, transparent=True)
+28 −0
Original line number Diff line number Diff line
from functools import partial

from hbutils.reflection import nested_for
from tqdm.auto import tqdm

from imgutils.edge import edge_image_with_canny as edge_image
from plot import image_table

if __name__ == '__main__':
    demo_images = ['hutao.png', 'skadi.jpg']
    funcs = [
        ('canny', partial(edge_image)),
        ('canny\nbackcolor=transparent', partial(edge_image, backcolor='transparent')),
        ('canny\nbackcolor=white\nforecolor=black',
         partial(edge_image, backcolor='white', forecolor='black')),
    ]
    table = [[item] for item in demo_images]
    for (xi, origin_image), (_, func) in \
            tqdm(list(nested_for(enumerate(demo_images), funcs))):
        table[xi].append(func(origin_image))

    image_table(
        table,
        columns=['origin', *(name for name, _ in funcs)],
        rows=['' for _ in demo_images],
        save_as='canny.dat.svg',
        figsize=(1600, 980),
    )
+23 −0
Original line number Diff line number Diff line
imgutils.edge.canny
==============================

.. currentmodule:: imgutils.edge.canny

.. automodule:: imgutils.edge.canny



get_edge_by_canny
--------------------------------------

.. autofunction:: get_edge_by_canny



edge_image_with_canny
--------------------------------------

.. autofunction:: edge_image_with_canny


+28 −0
Original line number Diff line number Diff line
from functools import partial

from hbutils.reflection import nested_for
from tqdm.auto import tqdm

from imgutils.edge import edge_image_with_canny, edge_image_with_lineart, edge_image_with_lineart_anime
from plot import image_table

if __name__ == '__main__':
    demo_images = ['hutao.png', 'skadi.jpg', 'xx.jpg', 'surtr_underwear.png']
    funcs = [
        ('canny', edge_image_with_canny),
        ('lineart', edge_image_with_lineart),
        ('lineart\n(coarse)', partial(edge_image_with_lineart, coarse=True)),
        ('lineart\nanime', edge_image_with_lineart_anime)
    ]
    table = [[item] for item in demo_images]
    for (xi, origin_image), (_, func) in \
            tqdm(list(nested_for(enumerate(demo_images), funcs))):
        table[xi].append(func(origin_image, backcolor='white', forecolor='black'))

    image_table(
        table,
        columns=['origin', *(name for name, _ in funcs)],
        rows=['' for _ in demo_images],
        save_as='edge.dat.svg',
        figsize=(1800, 1350),
    )
+1.71 MiB
Loading image diff...
Loading