ngx-document-scanner
Version:
Angular 2+ component for cropping and enhancing images of documents
113 lines (83 loc) • 4.69 kB
Markdown
# Ngx Document Scanner
An Angular component for cropping and enhancing images of documents, for implementation on a mobile or desktop app.
It uses a [WASM](https://webassembly.org/) build of [OpenCV](https://opencv.org/) to manipulate images, to achieve near-native performance.
Note that there are a few extra steps required to configure the component other than installing the package from npm.
## Live Demo
View a live demo **[here](https://roiperlman.github.io/ngx-document-scanner)**
## Installation & Setup
install the package via npm
npm install ngx-document-scanner --save
the UI is based on `@angular/material`, if you don't have it installed:
ng add @angular/material
choose 'yes' when prompted if you wish to add angular animations as it is needed for some of the components.
##### Configure OpenCV
copy the opencv.js files to your assets folder (or any other folder). you can build the files yourself ([instructions on the OpenCV site](https://docs.opencv.org/3.4/d4/da1/tutorial_js_setup.html)), or download them from this package's [repository](https://github.com/roiperlman/ngx-document-scanner).
both opencv.js & opencv_js.wasm need to placed in the same folder.
import the package to your `app.module`. you'll need to configure the location of the open cv files.
import {OpenCVConfig} from 'ngx-document-scanner';
import {NgxDocumentScannerModule} from 'ngx-document-scanner';
// set the location of the OpenCV files
const openCVConfig: OpenCVConfig = {
openCVDirPath: '/assets/opencv'
};
@NgModule({ imports:
[NgxDocumentScannerModule.forRoot(openCVConfig)],
bootstrap: [AppComponent]
})
export class AppModule { }
## Usage
#### add component to template and bind to inputs and outputs.
<ngx-doc-scanner
*ngIf="image"
[file]="image"
[config]="config">
(editResult)="editResult($event)"
(exitEditor)="exitEditor($event)"
(error)="onError($event)"
(processing)="editorState($event)"
</ngx-doc-scanner>
#### set configuration options. for example:
config: DocScannerConfig = {
editorBackgroundColor: '#fafafa',
buttonThemeColor: 'primary',
cropToolColor: '#ff4081',
cropToolShape: 'circle',
exportImageIcon: 'cloud_download'
};
## Component I\O
### Inputs
|input|type|description|
|--|--|--|
| **file** | `File` | sets an image for editing |
| **config** | `DocScannerConfig` | configuration object for the component. see [section](#config) dedicated to te config object. |
### Outputs
|output|type|description|
|--|--|--|
| **error** | `EventEmitter<any>` | fires on error |
| **editResult** | `EventEmitter<Blob>` | fires when the users submits the image |
|**exitEditor**| `EventEmitter<any>`| fires when the user exits the editor|
|**processing**|`EventEmitter<boolean>`|fires true when the editor is prcessing or loading\parsing the OpenCV module.
<a id="config"></a>
## Configuration Object
optional configuration values that can be passed to the component.
import {DocScannerConfig} form 'ngx-document-scanner'
config: DocScannerConfig = {
....
}
| property | type | description |
|--|--|--|
|**buttonThemeColor** | "primary" | "warn" | "accent" | material design theme color name for the buttons on the component|
|**cropToolColor**|`string`|color of the crop tool (points and connecting lines) |
|**cropToolDimensions** | `{width: number; height: nubmer;}`| width and height of the crop tool points|
|**cropToolLineWeight** |`number`|weight of the crop tool's connecting lines |
|**cropToolShape**|`'rect' | 'circle'`|shape of the crop tool points |
|**editorBackgroundColor**|`string`|background color of the main editor div |
|**editorDimensions** | an object of css keys value pairs| css properties for the main editor div |
|**exportImageIcon** |`string`| icon for the button that completes the editing and emits the edited image.|
**extraCss**|an object of css keys value pairs|css that will be added to the main div of the editor component |
|**maxImageDimensions** | `{width: number; height: nubmer;}` | max dimensions of oputput image. if set to zero will not resize the image.|
|**maxPreviewWidth** | `number`|max width of the preview pane|
## Ngx-OpenCV
The angular service used to load the open cv library and monitor it's state is also available as a standalone package: [NgxOpenCV](https://www.npmjs.com/ngx-opencv)
## License
This project is licensed under the MIT License.