Angular utility for compressing images to a satisfying size, that you can choose
npm i ngx-image-compress
Example here: https://stackblitz.com/edit/ngx-compress-sample
Import it in your app module
import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core';
import {AppComponent} from './app.component';
import {NgxImageCompressService} from 'ngx-image-compress';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
providers: [NgxImageCompressService],
bootstrap: [AppComponent]
})
export class AppModule {}
Use it in your component
import {Component} from '@angular/core';
import {NgxImageCompressService} from 'ngx-image-compress';
@Component({
selector: 'app-root',
template: `
<div>
<button (click)="compressFile()">Upload and compress Image</button>
<img *ngIf="imgResultBeforeCompress" [src]="imgResultBeforeCompress" alt="">
<img *ngIf="imgResultAfterCompress" [src]="imgResultAfterCompress" alt="">
</div>
`
})
export class AppComponent {
constructor(private imageCompress: NgxImageCompressService) {}
imgResultBeforeCompress:string;
imgResultAfterCompress:string;
compressFile() {
this.imageCompress.uploadFile().then(({image, orientation}) => {
this.imgResultBeforeCompress = image;
console.warn('Size in bytes was:', this.imageCompress.byteCount(image));
this.imageCompress.compressFile(image, orientation, 50, 50).then(
result => {
this.imgResultAfterCompress = result;
console.warn('Size in bytes is now:', this.imageCompress.byteCount(result));
}
);
});
}
}
We will use Renderer2, and transform the image multiple time through HTML canvas encrustation. In fact you can use the static version into the library and import renderer by yourself.
Я изменил правило сжатия:
- вместо задания процента изменения, я решил задавать конкретный размер квадратного изображения в пикселах (например, я захотел аватарку пользователя ужать перед сохранением в базе данных до пвзмера 80х80).
- если изображение меньше заданного размера квадрата, то ничего делать не надо.
Как получить версию для использования:
- Выполнить скрипт "npm run build-lib" (командный файл "build.cmd")
- Устанавливать оригинальную версию нет необходимости (из package.json - убрать).
- Скопировать папку "ngx-image-compress" в "\tender-manager\client\node_modules"
Update to Angular 11
Fix upload for iOS
Expose getOrientation api publically
Update to Angular 8 (angular 7 is enough)
Fix DOC_ORIENTATION import (not a required import)
Since Angular 6 include its own packaging system, I no longer need my webpack config to build it. Everything is working in angular 7 without complaint now (test app is on github)
Adding Live example.
Everything is now working and tested but I will make some arrangement to the code in index.ts
before submitting it again to npm
, in order to make it more handy.
Upload to Github Need some fixes and tests to be use as a static library