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

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 

8 

9try: 

10 from ..parsers.raster import raster_to_animation, TraceOptions 

11 raster = True 

12except ImportError: 

13 raster = False 

14 

15 

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 

60 

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)