mirror of
https://github.com/OpenVGLab/OmniLottie.git
synced 2026-09-17 07:36:27 +00:00
Initial Commit
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
from .base import importer
|
||||
from ..parsers.baseporter import ExtraOption
|
||||
from ..parsers.pixel import (
|
||||
pixel_to_animation_paths, pixel_to_animation,
|
||||
raster_to_embedded_assets, raster_to_linked_assets
|
||||
)
|
||||
from ..parsers.svg.importer import parse_color
|
||||
|
||||
try:
|
||||
from ..parsers.raster import raster_to_animation
|
||||
raster = True
|
||||
except ImportError:
|
||||
raster = False
|
||||
|
||||
|
||||
@importer("Raster image", ["bmp", "png", "gif", "webp", "tiff"], [
|
||||
ExtraOption("n_colors", type=int, default=1, help="Number of colors to quantize"),
|
||||
ExtraOption("palette", type=parse_color, default=[], nargs="+", help="Custom palette"),
|
||||
ExtraOption(
|
||||
"mode",
|
||||
default="embed",
|
||||
choices=["external", "embed", "pixel", "polygon"] + (["trace"] if raster else []),
|
||||
help="Vectorization mode:\n" +
|
||||
" * external : load images as linked assets\n" +
|
||||
" * embed : load images as embedded assets\n" +
|
||||
" * pixel : Vectorize the image into rectangles\n" +
|
||||
" * polygon : Vectorize the image into polygonal shapes\n" +
|
||||
" Looks the same as pixel, but a single shape per color\n" +
|
||||
" * trace : (if available) Use potrace to vectorize\n"
|
||||
),
|
||||
ExtraOption("frame_delay", type=int, default=4, help="Number of frames to skip between images"),
|
||||
ExtraOption("framerate", type=int, default=60, help="Frames per second"),
|
||||
ExtraOption("frame_files", nargs="+", default=[], help="Additional frames to import"),
|
||||
ExtraOption(
|
||||
"color_mode",
|
||||
default="nearest",
|
||||
choices=["nearest", "exact"],
|
||||
help="How to quantize colors.\n" +
|
||||
" * nearest will map each color to the most similar in the palette\n" +
|
||||
" * exact will only match exact colors"
|
||||
),
|
||||
ExtraOption(
|
||||
"embed_format",
|
||||
default=None,
|
||||
help="Format to store images internally when using `embed` mode"
|
||||
),
|
||||
])
|
||||
def import_raster(filenames, n_colors, palette, mode, frame_delay=1,
|
||||
framerate=60, frame_files=[], color_mode="nearest", embed_format=None):
|
||||
if not isinstance(filenames, list):
|
||||
filenames = [filenames]
|
||||
filenames = filenames + frame_files
|
||||
|
||||
if mode == "embed":
|
||||
return raster_to_embedded_assets(filenames, frame_delay, framerate, embed_format)
|
||||
elif mode == "external":
|
||||
return raster_to_linked_assets(filenames, frame_delay, framerate)
|
||||
elif mode == "trace":
|
||||
from ..parsers.raster import QuanzationMode
|
||||
# TODO QuanzationMode for raster
|
||||
cm = QuanzationMode.Nearest if color_mode == "nearest" else QuanzationMode.Exact
|
||||
|
||||
return raster_to_animation(
|
||||
filenames, n_colors, frame_delay,
|
||||
framerate=framerate,
|
||||
palette=palette,
|
||||
mode=cm
|
||||
)
|
||||
elif mode == "polygon":
|
||||
return pixel_to_animation_paths(filenames, frame_delay, framerate)
|
||||
else:
|
||||
return pixel_to_animation(filenames, frame_delay, framerate)
|
||||
Reference in New Issue
Block a user