Coverage for lib/lottie/importers/raster.py: 8%
27 statements
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-20 16:17 +0100
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-20 16:17 +0100
1from .base import importer
2from ..parsers.baseporter import ExtraOption
3from ..parsers.pixel import (
4 pixel_to_animation_paths, pixel_to_animation,
5 raster_to_embedded_assets, raster_to_linked_assets
6)
7from ..parsers.svg.importer import parse_color
9try:
10 from ..parsers.raster import raster_to_animation, TraceOptions
11 raster = True
12except ImportError:
13 raster = False
16@importer("Raster image", ["bmp", "png", "gif", "webp", "tiff"], [
17 ExtraOption("n_colors", type=int, default=1, help="Number of colors to quantize"),
18 ExtraOption("palette", type=parse_color, default=[], nargs="+", help="Custom palette"),
19 ExtraOption(
20 "mode",
21 default="trace" if raster else "embed",
22 choices=["external", "embed", "pixel", "polygon"] + (["trace"] if raster else []),
23 help="Vectorization mode:\n" +
24 " * external : load images as linked assets\n" +
25 " * embed : load images as embedded assets\n" +
26 " * pixel : Vectorize the image into rectangles\n" +
27 " * polygon : Vectorize the image into polygonal shapes\n" +
28 " Looks the same as pixel, but a single shape per color\n" +
29 " * trace : (if available) Use potrace to vectorize\n"
30 ),
31 ExtraOption("frame_delay", type=int, default=4, help="Number of frames to skip between images"),
32 ExtraOption("framerate", type=int, default=60, help="Frames per second"),
33 ExtraOption("frame_files", nargs="+", default=[], help="Additional frames to import"),
34 ExtraOption(
35 "color_mode",
36 default="nearest",
37 choices=["nearest", "exact"],
38 help="How to quantize colors.\n" +
39 " * nearest will map each color to the most similar in the palette\n" +
40 " * exact will only match exact colors"
41 ),
42 ExtraOption(
43 "embed_format",
44 default=None,
45 help="Format to store images internally when using `embed` mode"
46 ),
47 ExtraOption(
48 "stroke",
49 default=1,
50 type=int,
51 help="Stroke width for output shapes"
52 ),
53])
54def import_raster(filenames, n_colors, palette, mode, frame_delay=1,
55 framerate=60, frame_files=[], color_mode="nearest",
56 embed_format=None, stroke=1):
57 if not isinstance(filenames, list):
58 filenames = [filenames]
59 filenames = filenames + frame_files
61 if mode == "embed":
62 return raster_to_embedded_assets(filenames, frame_delay, framerate, embed_format)
63 elif mode == "external":
64 return raster_to_linked_assets(filenames, frame_delay, framerate)
65 elif mode == "trace":
66 from ..parsers.raster import QuanzationMode
67 options = TraceOptions()
68 options.color_mode = QuanzationMode.Nearest if color_mode == "nearest" else QuanzationMode.Exact
69 options.stroke_width = stroke
70 return raster_to_animation(
71 filenames, n_colors, frame_delay,
72 framerate=framerate,
73 palette=palette,
74 trace_options=options
75 )
76 elif mode == "polygon":
77 return pixel_to_animation_paths(filenames, frame_delay, framerate)
78 else:
79 return pixel_to_animation(filenames, frame_delay, framerate)