Angular Component
Use Pixu with Angular for easy image compression in your Angular applications.
Live Demo
Angular API — live demo
Same Pixu compress() used by the Angular component. Pick a sample or upload.
Installation
bash
npm install @pantanal/pixu @angular/core @angular/commonBasic Usage
Import and use the PixuCompressorComponent:
typescript
import { Component } from '@angular/core';
import { PixuCompressorComponent } from 'pixu/components/angular/pixu-compressor.component';
import type { CompressionResult } from '@pantanal/pixu';
@Component({
selector: 'app-root',
standalone: true,
imports: [PixuCompressorComponent],
template: `
<pixu-compressor
[options]="compressionOptions"
(compress)="handleCompress($event)"
(error)="handleError($event)"
></pixu-compressor>
`
})
export class AppComponent {
compressionOptions = {
quality: 0.8,
maxWidth: 1920,
maxHeight: 1080,
};
handleCompress(result: CompressionResult) {
console.log('Compressed:', result);
}
handleError(error: Error) {
console.error('Error:', error);
}
}Inputs
options
Type: CompressionOptions
Compression options. See CompressionOptions.
autoCompress
Type: boolean
Default: true
Automatically compress when a file is selected.
samples
Type: { id: string; label: string; url: string; file: string }[]
Optional sample images. Use assets/ paths in Angular (e.g. assets/photo-landscape.jpg).
html
<pixu-compressor
[samples]="sampleImages"
[options]="{ format: 'image/pixu' }"
></pixu-compressor>See Framework Examples.
Outputs
compress
Emitted when compression completes successfully.
typescript
@Output() compress = new EventEmitter<CompressionResult>();error
Emitted when compression fails.
typescript
@Output() error = new EventEmitter<Error>();progress
Emitted during compression to report progress.
typescript
@Output() progress = new EventEmitter<number>();Advanced Example
typescript
import { Component } from '@angular/core';
import { PixuCompressorComponent } from 'pixu/components/angular/pixu-compressor.component';
import type { CompressionResult } from '@pantanal/pixu';
@Component({
selector: 'app-image-compressor',
standalone: true,
imports: [PixuCompressorComponent],
template: `
<pixu-compressor
[options]="options"
[autoCompress]="true"
(compress)="onCompress($event)"
(error)="onError($event)"
(progress)="onProgress($event)"
></pixu-compressor>
<div *ngIf="result">
<p>Compression ratio: {{ (result.compressionRatio * 100).toFixed(1) }}%</p>
<button (click)="download()">Download</button>
</div>
`
})
export class ImageCompressorComponent {
options = {
quality: 0.8,
maxWidth: 1920,
maxHeight: 1080,
format: 'auto' as const,
stripMetadata: true,
enableSmartQuality: true,
};
result: CompressionResult | null = null;
onCompress(compressionResult: CompressionResult) {
this.result = compressionResult;
}
onError(error: Error) {
console.error('Compression failed:', error);
}
onProgress(progress: number) {
console.log('Progress:', progress);
}
download() {
if (!this.result) return;
const link = document.createElement('a');
link.href = URL.createObjectURL(this.result.file);
link.download = 'compressed.jpg';
link.click();
}
}Features
- Drag and drop support
- Progress tracking
- Error handling
- Download compressed image
- Responsive design
- TypeScript support
- Standalone component
