vue-select-avatar
Version:
180 lines (179 loc) • 4.12 kB
TypeScript
import { default as Viewport } from './Viewport.vue';
/**
* 位置信息
*/
export interface Position {
viewportWidth: number;
viewportHeight: number;
viewX: number;
viewY: number;
viewSize: number;
imageX: number;
imageY: number;
imageWidth: number;
imageHeight: number;
imageScale: number;
}
export interface SimplePosition {
x: number;
y: number;
}
export interface ViewportProps {
size?: number;
width?: number;
height?: number;
/**
* 图片信息
*/
info?: ImageInfo;
/**
* 观察窗口大小
*/
viewSize?: number;
/**
* 是否为网格背景
*/
grid?: boolean;
/**
* 缩放步长
*/
scaleStep?: number;
/**
* 缩放步长(按下Ctrl键时)(设置为0时,则不生效)
*/
ctrlScaleStep?: number;
/**
* 缩放步长(按下Shift键时)(设置为0时,则不生效)
*/
shiftScaleStep?: number;
/**
* 滚轮反向
*/
wheelReverse?: boolean;
/**
* 图片固定模式:true=固定图片移动视窗,false=固定视窗移动图片(默认)
*/
fixedImage?: boolean;
/**
* 最小观察窗口尺寸
*/
minViewSize?: number;
/**
* 图片边距
*/
imagePadding?: number;
/**
* 方向键移动
*/
directionKey?: boolean;
/**
* wasd 键移动
*/
wasdKey?: boolean;
/**
* 是否强制使用双层DOM
*/
forceDoubleLayer?: boolean;
/**
* 使用阴影实现观察窗镂空效果
*/
shadowMask?: boolean;
/**
* 尺寸是否显示 // TODO 待实现
*/
showSize?: boolean;
}
export interface ImageSelectOptions {
/**
* 允许的文件类型(参考input的accept属性)
*/
accept?: string;
/**
* 最大文件大小(单位:字节)
* @default 2 * 1024 * 1024 // 2MB
*/
maxFileSize?: number;
/**
* 图片最小尺寸(宽高任一小于该值则无效)
*/
minSize?: number;
/**
* 图片最大尺寸(宽高任一超过该值则无效)
* @default 5000
*/
maxSize?: number;
/**
* 超过最大尺寸时是否等比例缩放到最大尺寸
* @default false
*/
resizeToMax?: boolean;
/**
* 是否启用压缩
* - true:全部压缩
* - number:文件大于该值时压缩(单位:字节)
* @default false
*/
compress?: boolean | number;
/**
* 压缩质量(0-1)
* @default 0.8
*/
quality?: number;
/**
* 矢量图最小尺寸
* @default 1024
*/
minVectorSize?: number;
}
export interface ImageSelectResult {
file: File;
width: number;
height: number;
}
export interface ImageInfo extends ImageSelectResult {
url?: string;
}
export type CropperFormat = 'file' | 'base64';
export interface CropperOptions {
/**
* 数据格式
*/
format?: CropperFormat;
/**
* 输出图片尺寸
*/
size?: number;
/**
* 最大输出图片尺寸(如果截取图片尺寸超过该值则等比例缩放到该尺寸,如果设置了 size,该属性则无效)
*/
maxSize?: number;
/**
* 如果截取图片尺寸小于 size 时,则使用截取图片的尺寸
* (如果还是使用 size 作为图片尺寸,则会将图片等比例放大,会造成文件大小变大)
* (仅在设置了 size 时生效)
*/
useOriginSize?: boolean;
/**
* 输出图片类型
*/
type?: 'image/jpeg' | 'image/png' | 'image/webp';
/**
* 输出图片质量(0-1)
*/
quality?: number;
/**
* 文件名
*/
filename?: string;
/**
* 当输出图片类型为 image/jpeg 的底色
*/
backgroundColor?: string;
}
export type PointPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
export interface PreviewProps {
size?: number;
viewportRef?: InstanceType<typeof Viewport>;
round?: boolean;
bg?: string;
}