ProcessModel 定义了一些实用的方法来处理类似 /resize,w_200,h_200,m_fill,limit_0/format,webp/imageslim
的字符串。
api 类似URLSearchParams
类似:https://image-demo.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/crop,x_100,y_50
类似:https://e-share.obs.cn-north-1.myhuaweicloud.com/example.jpg?x-image-process=image/resize,w_500,limit_0
其他...
npm install process-model -S
unpkg
https://www.unpkg.com/browse/process-model
jsdelivr
https://www.jsdelivr.com/package/npm/process-model
import ProcessModel from 'process-model'
const model = new ProcessModel()
model.append('resize', {
w: 200,
height: 200
})
model.delete('format')
model.has('resize')
model.set('resize', {
w: 300
})
model.append('resize', 'w_400,h_500,limit_0')
model.sort()
model.toString() // /resize,w_400,h_500,limit_0
ProcessModel(model, config)
返回一个ProcessModel 对象
字符串或者数组。对于同命令参数,后面的会覆盖前面的。
字符串
const modelInit = `/crop,x_100,y_50/format,webp`
const model = new ProcessModel(modelInit)
数组模型
const modelInit = [
{
name: 'crop', // 命令名称
value: { // 命令值
x: 100,
y: 500
}
},
{
name: 'resize',
value: 'w_200,h_200' // 命令值也可以是一个多参数字符串
},
{
name: 'format',
value: 'png'
},
{
name: 'imageslim'
}
]
const model = new ProcessModel(modelInit)
默认参数
// 无参数命令合集
withoutParamsCommand: ['info', 'average-hue', ...],
// 多个参数的命令合集
multipleArgCommand: ['resize', 'crop', 'circle', ...],
// 命令排序规则
commandSort: ['resize', 'crop', ..., 'info', 'average-hue'],
// 管道分隔符
PIPE_SEPARATOR: '/',
// 参数分隔符
PARAMETER_SEPARATOR: '_',
// 命令分隔符
COMMAND_SEPARATOR: ','
将参数分为三类
- 没有参数的命令; 例如
info
,imageslim
- 只有一个参数的命令; 例如
format
,interlace
- 多个参数的命令;例如
resize
分别表示在上边的配置里
追加参数。如果有同一个命令,参数会合并
model.append(name, value)
name: 命令名称;
value: 命令值;对象或者参数字符串;
model.append('resize', 'w_200,h_300,limit_0')
model.append('resize', {
w: 400,
h: 500,
m: 'fill'
})
// 空值会被清除
model.append('resize', {
m: null
})
model.append('info')
model.append('format', 'png')
model.toString() // /resize,w_400,h_500,limit_0/format,png/info
设置参数。如果有同一个命令,会覆盖
model.set(name, value)
name: 命令名称;
value: 命令值;对象或者参数字符串;
model.set('resize', 'w_200,h_300,limit_0')
model.set('resize', {
w: 400
})
model.set('info')
model.set('format', 'png')
model.toString() // /resize,w_400/format,png/info
删除指定命令
model.delete(name)
name: 命令名称;
model.set('resize', 'w_200,h_300,limit_0')
model.set('resize', {
w: 400
})
model.set('info')
model.set('format', 'png')
model.delete('resize')
model.toString() // /format,png/info
判断是否存在指定命令
model.has(name)
name: 命令名称;
model.set('resize', 'w_200,h_300,limit_0')
model.set('resize', {
w: 400
})
model.set('info')
model.set('format', 'png')
model.delete('resize')
model.has('resize') // false
按照 config.commandSort
排序规则进行排序
model.sort()
返回序列化字符串;已经按照 config.commandSort
排序规则进行排序过。在使用append
、set
等命令时,无需关注顺序。
model.toString()
返回版本号
model.VERSION // 1.0.0