# imgViewer
**Repository Path**: cznic/img-viewer
## Basic Information
- **Project Name**: imgViewer
- **Description**: 一个简单的图片查看器,支持放大,缩小,拖拽,旋转,编辑
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2022-08-03
- **Last Updated**: 2022-08-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# imgviewer #
图片预览器,可以对图片进行放大,缩小,拖拽,旋转,复位,下载和图片的编辑功能(包括画框,画圆,文本,箭头,马赛克,撤回,下载功能)。当前图片的编辑功能也可以单独使用,后面我将继续对其优化,增加更多的灵活性。
### 使用方式
使用`ES6 import`或者`iife`的方式
example:http://81.70.151.250:9090/imgviewer/
#### iife的方式:
下载这个index.js放到你的项目中使用script标签引入:http://81.70.151.250:9090/imgviewer/index.js
```js
//script引入 会导出ImgViewer类
// 使用
const ImgViewer = imgviewer.default; // 获取imgviewer类
const useScale = imgviewer.useScale; // 获取放大缩小插件
const useDrag = imgviewer.useDrag; // 获取拖拽插件
const useEditPic = imgviewer.useEditPic; // 获取编辑的插件
const useDownloadImg = imgviewer.useDownloadImg; // 获取下载的插件
const useOperateCont = imgviewer.useOperateCont; // 获取操作栏的插件
const container = document.getElementById('imgcont');
const target = document.getElementById('img');
const imgViewer = new ImgViewer({container,target}); // 实例化imgviewer类
const editOptions = {
imgUrl: target.src, // 图片地址
width: 900, // canvas展示的宽高
height: 600, // canvas展示的宽高
// 编辑时操作的选项
operateArray: ['lastPic','drag','rect','circle','text','arrow','mosaic','revocation','downloadPic'],
// 控制显示操作项选项
showOperateSel: ['rect','circle','text','arrow'],
}
// 使用各插件
imgViewer
.use(useScale())
.use(useDrag())
.use(useDownloadImg())
.use(useEditPic(editOptions)) // 在预览上绑定编辑操作
// 控制操作栏的操作项
let arr = [];
// 遍历可以使用的所有操作项
imgViewer.traverseOperateFn((fn,key)=>{
arr.push(key);
})
// 自定义绑定选中的操作项 operateMap
imgViewer.use(useOperateCont({operateMap:arr}));
```
#### ES6 import:
- 安装
`npm install imgview-js`
- 使用
```js
import ImgViewer, { useScale, useDrag, useDownloadImg, useOperateCont, useEditPic } from 'imgview-js';
const container = document.getElementById('imgcont');
const target = document.getElementById('img');
const imgViewer = new ImgViewer({container,target});
const editOptions = {
imgUrl: target.src, // 图片地址
width: 900, // canvas展示的宽高
height: 600, // canvas展示的宽高
// 编辑时操作的选项
operateArray:['lastPic','drag','rect','circle','text','arrow','mosaic','revocation','downloadPic'],
// 控制显示操作项选项
showOperateSel: ['rect','circle','text','arrow'],
}
imgViewer
.use(useScale())
.use(useDrag())
.use(useDownloadImg())
.use(useEditPic(editOptions)) // 在预览上绑定编辑操作
.use(useOperateCont());
```
### ImgViewer 图片查看器
ImgViewer是图片查看器的一个类,接受配置项,进行各项配置操作;
`const imgViewer = new ImgViewer(options);`
#### 1、配置项options
| Field | Type | default | Description |
| ------------- | --------------- | ------- | --------------------------------------------- |
| `container` | `HtmlElement` | - | 图片的父级容器type为Element |
| `target` | ``HtmlElement`` | - | 被操作的图片 type为Element |
| `rate?` | `number` | 100 | 被放大或缩小的倍数,默认100相当于scale属性的1 |
| `delta?` | `number` | 20 | 每次放大或缩小的步调 |
| `maxScale?` | `number` | 500 | 图片能够放大的最大的倍数 |
| `minScale?` | `number` | 40 | 图片能够缩小的最小的倍数 |
| `rotate?` | `number` | 0 | 图片当前的旋转的角度,默认的单位为deg |
| `rotateStep?` | `number` | 90 | 图片旋转的步调,默认的单位为deg |
#### 2、实例方法
##### **scaleOperte**缩放方法
`this.scaleOperte(type) `
type可选值:
| Type | Description |
| :---------: | ----------------------------------------------------- |
| `'add'` | 进行放大操作,根据`delta`的值作为步调进行增大放大倍数 |
| `'minus'` | 进行缩小操作,根据`delta`的值作为步调进行减小放大倍数 |
| `'recover'` | 恢复原来的大小 |
##### **rotateOperte**旋转方法
`this.rotateOperte(type)`
type可选值:
| Type | Description |
| :-------: | ------------------------------------------------------------ |
| `'left'` | 操作图片向左旋转,旋转步调为配置值`rotateStep`得大小,默认的单位deg |
| `'right'` | 操作图片向右旋转 |
##### **traverseOperateFn**遍历操作栏的所有方法
`this.traverseOperateFn(callback)`
参数:
| Field | Type | Description |
| :----------: | ---------- | ------------------------------------------------------------ |
| `'callback'` | `Function` | 回调函数,实例方法调用时会传入回调fn,key作为参数;fn是操作栏的执行方法,key是操作栏的绑定映射 |
##### **getOperateFn**获取操作栏的执行方法
`this.getOperateFn(key)`
参数:
| Field | Type | Description |
| :-----: | -------- | --------------------- |
| `'key'` | `string` | key是操作栏的绑定映射 |
##### **addOperateFn**为操作栏添加方法
`this.addOperateFn(key,fn)`
参数:
| Field | Type | Description |
| :-----: | ---------- | --------------------- |
| `'key'` | `string` | key是操作栏的绑定映射 |
| `'fn'` | `Function` | fn是操作栏的执行方法 |
##### **deleteOperateFn**删除操作栏的方法
`this.rotateOperte(key)`
参数:
| Field | Type | Description |
| :-----: | -------- | --------------------- |
| `'key'` | `string` | key是操作栏的绑定映射 |
修改操作栏的方法需要在绑定操作栏之前进行(即使用useOperateCont之前)
#### 3、use插件使用
`this.use(plugin)`
插件plugin声明格式:
```js
function plugin(options) //插件也可以配置参数
return (imgviewer){ // 传入图片查看器的实例
console.log(imgviewer);
}
}
```
插件使用:
```js
const imgViewer = new ImgViewer({container,target});
imgViewer.use(plugin(options))
```
#### 4、imgViewer内置插件
img-viewer内置了一些插件,可以针对需求进行插拔式使用;
##### useScale
`imgViewer.use(useScale())`
给图片查看器绑定缩放方法,插件使用后,可以对图片滑动鼠标滚轮进行对应的放大或者缩小操作
##### useDrag
`imgViewer.use(useDrag())`
给图片查看器绑定拖拽方法,插件使用后,可以对图片进行拖拽的操作
##### useDownloadImg
`imgViewer.use(useDownloadImg())`
给图片查看器绑定下载的方法,插件使用后,可以在操作栏操作对图片进行下载,会在操作栏增加一个key为`'downloadPic'`的操作项,所以这个插件需要操作栏配合,并且需要在绑定操作栏之前进行绑定
##### useEditPic
`imgViewer.use(useDownloadImg(options))`
给图片查看器绑定编辑的方法,会在弹出层上对图片进行编辑;弹出层是插入在body下面的,铺满整个窗口;
options参数`object`:
| Field | Type | Description |
| :--------------: | ------------ | ------------------------------------------------------------ |
| `imgUrl` | `string` | 图片的路径 |
| `width` | `number` | canvas显示宽度 |
| `height` | `number` | canvas显示高度 |
| `operateArray` | `array` | 为绑定操作栏的key组成的集合,其所有值:`'lastPic'`,`'drag'`,`'rect'`,`'circle'`,
`'text'`,`'arrow'`,`'mosaic'`,`'revocation'`,`'downloadPic'` |
| `showOperateSel` | `array` | 目前只有这些操作key支持样式设置`['rect','circle','text','arrow']` |
**key值说明:**lastPic:退出编辑,drag:拖拽,rect:画框,circle:画(椭)圆,text:文本,arrow:箭头,mosaic:马赛克,revocation:撤回编辑,downloadPic:下载图片。
##### useOperateCont
`imgViewer.use(useOperateCont(options))`
options参数`object`:不传时默认全部操作项
| Field | Type | Description |
| :----------: | ------------ | ------------------------------------------------------------ |
| `operateMap` | `array` | 为绑定操作栏的key组成的集合,可以对操作栏进行筛选和排序;数组中的key的位置会映射到操作栏的操作项 |
imgViewer实例默认装配上如下操作项:`['scaleAdd','scaleMinus','scaleRecover','rotateLeft','rotateRight']`分别是放大,缩小,恢复,左旋,右旋;可通过上面实例方法进行删减或者进行排序;
给图片查看器绑定操作栏的方法,插件使用后,可以在图片的下方出现功能操作栏,所以如果有其他的操作功能则需要在绑定操作栏之前进行绑定。
**当然,如果这个操作栏的样式不符合你的需求或者压根不需要,那么你可以不用这个`useOperateCont`插件。自定义操作栏只需要你按照要求自己写一个插件即可,因为你可以根据实例方法`traverseOperateFn`遍历出所有可以使用的操作方法,然后根据需要调用即可;**
### ImgEditer 图片编辑器
ImgEditer是一个使用canvas对图片进行编辑的方法,该方法返回一个`promise`对象,对象传出编辑器实列可进行更多的自定义操作,这个实例实际就是`ImgViewer`类的实例,所以你可以在实例上取得编辑器的外层容器(插入到body上)`container`和canvas元素`target`以及实例方法。图片编辑时不建议开启缩放功能。
方法接受配置项options:
| Field | Type | Description |
| :--------------: | ------------ | ------------------------------------------------------------ |
| `imgUrl` | `string` | 图片的路径 |
| `width` | `number` | canvas显示宽度 |
| `height` | `number` | canvas显示高度 |
| `'operateArray'` | `array` | 为绑定操作栏的key组成的集合,其所有值:`'lastPic'`,`'drag'`,`'rect'`,`'circle'`, `'text'`,`'arrow'`,`'mosaic'`,`'revocation'`,`'downloadPic'` |
| `showOperateSel` | `array` | 目前只有这些操作key支持样式设置`['rect','circle','text','arrow']` |
**key值说明:**lastPic:退出编辑,drag:拖拽,rect:画框,circle:画(椭)圆,text:文本,arrow:箭头,mosaic:马赛克,revocation:撤回编辑,downloadPic:下载图片。operateArray 不填写该项可以不显示操作栏。
调用即可`ImgEditer(options)`返回编辑器实例;
example:http://81.70.151.250:9090/imgviewer/index-edit.html 该例子使用自定义操作栏
单独使用时:
##### iife方式:
下载这个index.js放到你的项目中使用script标签引入:http://81.70.151.250:9090/imgviewer/index.js
```js
//script引入 会导出ImgViewer类
const ImgEditer = imgviewer.ImgEditer;
const target = document.getElementById('img');
const editOptions = {
imgUrl: target.src, // 图片url地址就行
width: 900,
height: 600,
// 操作栏操作选项 按数组顺序显示 不传就不显示操作栏
operateArray: ['lastPic','drag','rect','circle','text','arrow','mosaic','revocation','downloadPic'],
// 控制显示操作项选项
showOperateSel: ['rect','circle','text','arrow'],
}
ImgEditer(editOptions).then(instance => {
let container = instance.container;
let canvas = instance.target;
// let quit = instance.getOperateFn('lastPic');
// quit(); // 退出编辑
});
```
##### ES6 import:
- 安装
`npm install imgview-js`
- 使用
```js
// 引入
import { ImgEditer } from 'imgview-js';
const target = document.getElementById('img');
const editOptions = {
imgUrl: target.src, // 图片url地址就行
width: 900,
height: 600,
// 操作栏操作项 按数组顺序显示 不传就不显示操作栏
operateArray: ['lastPic','drag','rect','circle','text','arrow','mosaic','revocation','downloadPic'],
// 控制显示操作项选项
showOperateSel: ['rect','circle','text','arrow'],
}
ImgEditer(editOptions).then(instance => {
let container = instance.container;
let canvas = instance.target;
// let quit = instance.getOperateFn('lastPic');
// quit(); // 退出编辑
});
```
### 更新历史
| 版本号 | 更新内容 | index.js |
| ------ | ------------------------------------------------------- | ------------------------------------------------------------ |
| 1.0.0 | 图片的预览,放大,缩小,拖拽,旋转,复位,下载 | [index_v1.0.0.js](http://81.70.151.250:9090/imgviewer/index_v1.0.0.js) |
| 1.1.0 | 图片的编辑,画框,画圆,文本,箭头,马赛克,撤回,下载 | [index_v1.1.0.js](http://81.70.151.250:9090/imgviewer/index_v1.1.0.js) |
| 1.2.0 | 给部分操作项增加颜色和大小的配置选项,修复bug,完善文档 | [index_v1.2.0.js](http://81.70.151.250:9090/imgviewer/index_v1.2.0.js) |
| dev | 优化,文档完善 | [index.js](https://gitee.com/TaBaBa/img-viewer/blob/develop/example/index.js) |
npm文档更新的稍慢,最新的请查看[gitee](https://gitee.com/TaBaBa/img-viewer)