# imgview-js

> img-viewer图片查看器

Latest version **1.2.1** (published 2022-10-17) · MIT license · 0 weekly downloads

## Install

```sh
npm install imgview-js
pnpm add imgview-js
yarn add imgview-js
bun add imgview-js
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.2.1 |
| Published | 2022-10-17 |
| First published | 2022-05-03 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 61.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | WangTao |
| Maintainers | wangtao_0525 |

## Links

- npm: https://www.npmjs.com/package/imgview-js
- Repository: https://TaBaBa@gitee.com/TaBaBa/img-viewer
- npm.io page: https://npm.io/package/imgview-js

## Recent versions

- 1.2.1 (latest) — 2022-10-17
- 1.2.0 — 2022-05-18
- 1.1.0 — 2022-05-12
- 1.0.0 — 2022-05-03

## README

# imgviewer #

图片预览器，可以对图片进行放大，缩小，拖拽，旋转，复位，下载和图片的编辑功能（包括画框，画圆，文本，箭头，马赛克，撤回，下载功能）。当前图片的编辑功能也可以单独使用，后面我将继续对其优化，增加更多的灵活性。

### 使用方式

使用`ES6 import`或者`umd`的方式

example:http://81.70.151.250:9090/imgviewer/

#### script标签引入的方式：

下载这个index.js放到你的项目中使用script标签引入:https://unpkg.com/imgview-js

```js
//script引入 会导出ImgViewer类
<script src="https://unpkg.com/imgview-js"></script>
// 使用
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>` | 为绑定操作栏的key组成的集合，其所有值：`'lastPic'`,`'drag'`,`'rect'`,`'circle'`,<br />`'text'`,`'arrow'`,`'mosaic'`,`'revocation'`,`'downloadPic'` |
| `showOperateSel` | `array<key>` | 目前只有这些操作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组成的集合，可以对操作栏进行筛选和排序；数组中的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>` | 为绑定操作栏的key组成的集合，其所有值：`'lastPic'`,`'drag'`,`'rect'`,`'circle'`, `'text'`,`'arrow'`,`'mosaic'`,`'revocation'`,`'downloadPic'` |
| `showOperateSel` | `array<key>` | 目前只有这些操作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 该例子使用自定义操作栏

单独使用时：

##### script标签引入方式：

​	下载这个index.js放到你的项目中使用script标签引入:https://unpkg.com/imgview-js

```js
//script引入 会导出ImgViewer类
<script src="https://unpkg.com/imgview-js"></script>

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(); // 退出编辑
  });
  
  
  ```

---
_Source: https://npm.io/package/imgview-js · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
