json-poster
Version:
Generate posters by configuring json
105 lines (104 loc) • 2.72 kB
TypeScript
export declare enum ElementType {
IMG = "img",
TEXT = "text",
RECT = "rect",
LINE = "line",
MUTIPLE_TEXT = "mutiple_text"
}
export declare enum xAlign {
LEFT = "left",
RIGHT = "right",
CENTER = "center"
}
export declare enum yAlign {
TOP = "top",
BOTTOM = "bottom",
CENTER = "center"
}
export declare enum ElementAlign {
LEFT = "left",
RIGHT = "right",
CENTER = "center"
}
export interface ILinearGradientColor {
type: 'linear';
colors: Array<any>;
rotate: number;
}
export interface IRadialGradientColor {
type: 'radial';
colors: Array<any>;
center: [number, number];
radius: number;
}
export type IColor = ILinearGradientColor | IRadialGradientColor | string;
export interface IPoster {
width: number;
height: number;
background: IColor;
directory?: string;
elements: IElement[];
sort: number;
}
export interface IElement {
type: ElementType | string;
width: number;
height: number;
align?: ElementAlign | string;
zIndex: number;
x: number | xAlign;
y: number | yAlign;
rotate?: number;
[key: string]: any;
}
export declare enum IImageMode {
scaleToFill = "scaleToFill",// 缩放模式,不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素
aspectFit = "aspectFit",// 缩放模式,保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。
aspectFill = "aspectFill"
}
export interface TextFragmentStyle {
color: string;
fontSize: number;
fontFamily?: string;
fontWeight?: string | number;
letterSpacing?: number;
}
export interface TextFragment extends TextFragmentStyle {
content: string;
width?: number;
fragmentId?: number;
}
export interface ElementImg extends IElement {
type: ElementType.IMG;
mode?: IImageMode | string;
content: string;
gaussBlur: boolean;
gaussRadius: number;
borderRadius: number;
}
export interface ElementText extends IElement, TextFragmentStyle {
type: ElementType.TEXT;
content: string;
lineHeight?: number;
maxLine?: number;
}
export interface ElementMutipleText extends IElement, TextFragmentStyle {
type: ElementType.MUTIPLE_TEXT;
content: TextFragment[];
lineHeight?: number;
maxLine?: number;
}
export interface ElementRect extends IElement {
type: ElementType.RECT;
color: IColor;
borderColor: string;
opacity?: number;
gaussBlur?: boolean;
gaussRadius?: number;
borderRadius?: number;
}
export interface ElementLine extends IElement {
color: string;
opacity?: number;
type: ElementType.LINE;
}