UNPKG

merge-images-grid

Version:

Merge images on canvas,looks likes grid template!Can be used both of node and browser.

100 lines (99 loc) 3.45 kB
import type { Canvas, Image, NodeCanvasRenderingContext2D } from 'canvas'; export interface CanvasGridProps { /** Canvas | HTMLCanvasElement */ canvas: Canvas | HTMLCanvasElement; /** canvas background color */ bgColor?: string; /** cell width */ width?: number; /** cell height */ height?: number; /** grid's padding default 10 */ padding?: number | number[]; /** a way of alignment each box along the appropriate axis,like css 'align-items',default 'center' */ alignItems?: 'center' | 'start' | 'end'; /** a way of justifying each box along the appropriate axis,like css 'justify-items',default 'center' */ justifyItems?: 'center' | 'start' | 'end'; /** image list */ list: ItemConfig[]; /** gap between each cell,default 10 */ gap?: number | [number, number]; /** column number default 3 */ col?: number; /** * columns's width type,default 'max' * * 'max': all columns's width will be the same(cell's max width). * * 'min': each columns's width will be the max of columns's cell. * * 'auto': if colSpan > 1 ,the cell colSpan columns's width will be the same. * * 'fixed': if CanvasGridProps['width'] set,all columns's width will be CanvasGridProps['width'],else the same as 'max'. */ widthType?: 'max' | 'min' | 'auto' | 'fixed'; /** cell's height type,default 'auto' */ heightType?: 'max' | 'min' | 'auto' | 'fixed'; /** * image draw type,like css 'object-fit' default:'contain' * * 'auto': if image overflow the cell,will be the same as 'contain' */ objectFit?: 'auto' | 'contain' | 'fill' | 'cover'; } export declare type ItemConfig = { /** colSpan of this cell */ colSpan?: number; /** rowSpan of this cell */ rowSpan?: number; /** cell's image */ image?: Image | Canvas; } & Pick<CanvasGridProps, 'width' | 'height' | 'alignItems' | 'justifyItems' | 'objectFit'>; interface Template extends ItemConfig { realWidth: number; realHeight: number; /** 最大绘图宽度 */ maxWidth: number; /** 最大绘图高度 */ maxHeight: number; colSpan: number; rowSpan: number; alignItems: 'center' | 'start' | 'end'; justifyItems: 'center' | 'start' | 'end'; objectFit?: 'auto' | 'contain' | 'fill' | 'cover'; } declare class CanvasGrid { itemWidth?: number; itemHeight?: number; left: number; top: number; bottom: number; right: number; gap: [number, number]; alignItems: 'center' | 'start' | 'end'; justifyItems: 'center' | 'start' | 'end'; list: CanvasGridProps['list']; col: number; canvas: Canvas; ctx: NodeCanvasRenderingContext2D; template: Template[][]; colTemplate: Template[][]; bgColor?: string; colWidths: number[]; rowHeights: number[]; widthType: 'max' | 'min' | 'auto' | 'fixed'; heightType: 'max' | 'min' | 'auto' | 'fixed'; objectFit: 'auto' | 'contain' | 'fill' | 'cover'; constructor(props: CanvasGridProps); private initTemplate; render(): void; /** 追加数据 */ appendData(list: CanvasGridProps['list']): void; private renderGrid; /** 设置canvas大小 */ private setSsize; private setFitWH; private getColTemplate; private getEmpty; } export default CanvasGrid;