UNPKG

@berry-cloud/ngx-unsplash

Version:

Lightweight Angular wrapper for the Unsplash API.

58 lines 7.1 kB
import { Pipe } from '@angular/core'; import { decode } from 'blurhash'; import { Observable } from 'rxjs'; import * as i0 from "@angular/core"; class BlurHashPipe { /** * [BlurHash placeholder](https://unsplash.com/documentation#blurhash-placeholders). * * Returns a URL of the BlurHash preview and then the URL of photo once the * photo been downloaded by the browser. * * @param photo to download * @param size to be returned, the default is thumb * @returns Observable of URL */ transform(photo, size = 'thumb') { return new Observable((observer) => { // Send URL of blur hash image observer.next(this.getImageFromBlurHash(photo).toDataURL()); const img = new Image(); img.src = photo.urls[size]; img.onload = () => { // Send URL of loaded image observer.next(img.src); observer.complete(); }; img.onerror = (err) => observer.error(err); }); } getImageFromBlurHash(photo) { const canvas = document.createElement('canvas'); let width = photo.width || 240; let r = width / 240; canvas.width = width / r; canvas.height = (photo.height || 180) / r; try { if (photo.blur_hash) { const pixels = decode(photo.blur_hash, canvas.width, canvas.height); const ctx = canvas.getContext('2d'); const imageData = ctx.createImageData(canvas.width, canvas.height); imageData.data.set(pixels); ctx.putImageData(imageData, 0, 0); } } catch { } return canvas; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: BlurHashPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); } static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.9", ngImport: i0, type: BlurHashPipe, name: "blurhash" }); } } export { BlurHashPipe }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: BlurHashPipe, decorators: [{ type: Pipe, args: [{ name: 'blurhash', }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmx1cmhhc2gucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC11bnNwbGFzaC9zcmMvbGliL3BpcGVzL2JsdXJoYXNoLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUdsQyxNQUdhLFlBQVk7SUFDdkI7Ozs7Ozs7OztPQVNHO0lBQ0gsU0FBUyxDQUNQLEtBQVksRUFDWixPQUF1RCxPQUFPO1FBRTlELE9BQU8sSUFBSSxVQUFVLENBQVMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUN6Qyw4QkFBOEI7WUFDOUIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUU1RCxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3hCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDaEIsMkJBQTJCO2dCQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQztZQUVGLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsS0FBWTtRQUN2QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWhELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDO1FBQy9CLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDcEIsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUxQyxJQUFJO1lBQ0YsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO2dCQUNuQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEUsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEMsTUFBTSxTQUFTLEdBQUcsR0FBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEUsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNCLEdBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNwQztTQUNGO1FBQUMsTUFBTSxHQUFHO1FBQ1gsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs4R0FqRFUsWUFBWTs0R0FBWixZQUFZOztTQUFaLFlBQVk7MkZBQVosWUFBWTtrQkFIeEIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsVUFBVTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWNvZGUgfSBmcm9tICdibHVyaGFzaCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQaG90byB9IGZyb20gJy4uL21vZGVsL3Bob3RvJztcblxuQFBpcGUoe1xuICBuYW1lOiAnYmx1cmhhc2gnLFxufSlcbmV4cG9ydCBjbGFzcyBCbHVySGFzaFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqIFtCbHVySGFzaCBwbGFjZWhvbGRlcl0oaHR0cHM6Ly91bnNwbGFzaC5jb20vZG9jdW1lbnRhdGlvbiNibHVyaGFzaC1wbGFjZWhvbGRlcnMpLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgVVJMIG9mIHRoZSBCbHVySGFzaCBwcmV2aWV3IGFuZCB0aGVuIHRoZSBVUkwgb2YgcGhvdG8gb25jZSB0aGVcbiAgICogcGhvdG8gYmVlbiBkb3dubG9hZGVkIGJ5IHRoZSBicm93c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gcGhvdG8gdG8gZG93bmxvYWRcbiAgICogQHBhcmFtIHNpemUgdG8gYmUgcmV0dXJuZWQsIHRoZSBkZWZhdWx0IGlzIHRodW1iXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgVVJMXG4gICAqL1xuICB0cmFuc2Zvcm0oXG4gICAgcGhvdG86IFBob3RvLFxuICAgIHNpemU6ICdyYXcnIHwgJ2Z1bGwnIHwgJ3JlZ3VsYXInIHwgJ3NtYWxsJyB8ICd0aHVtYicgPSAndGh1bWInXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyKSA9PiB7XG4gICAgICAvLyBTZW5kIFVSTCBvZiBibHVyIGhhc2ggaW1hZ2VcbiAgICAgIG9ic2VydmVyLm5leHQodGhpcy5nZXRJbWFnZUZyb21CbHVySGFzaChwaG90bykudG9EYXRhVVJMKCkpO1xuXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgIGltZy5zcmMgPSBwaG90by51cmxzW3NpemVdO1xuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgLy8gU2VuZCBVUkwgb2YgbG9hZGVkIGltYWdlXG4gICAgICAgIG9ic2VydmVyLm5leHQoaW1nLnNyYyk7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9O1xuXG4gICAgICBpbWcub25lcnJvciA9IChlcnIpID0+IG9ic2VydmVyLmVycm9yKGVycik7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEltYWdlRnJvbUJsdXJIYXNoKHBob3RvOiBQaG90byk6IEhUTUxDYW52YXNFbGVtZW50IHtcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcblxuICAgIGxldCB3aWR0aCA9IHBob3RvLndpZHRoIHx8IDI0MDtcbiAgICBsZXQgciA9IHdpZHRoIC8gMjQwO1xuICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoIC8gcjtcbiAgICBjYW52YXMuaGVpZ2h0ID0gKHBob3RvLmhlaWdodCB8fCAxODApIC8gcjtcblxuICAgIHRyeSB7XG4gICAgICBpZiAocGhvdG8uYmx1cl9oYXNoKSB7XG4gICAgICAgIGNvbnN0IHBpeGVscyA9IGRlY29kZShwaG90by5ibHVyX2hhc2gsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBjdHghLmNyZWF0ZUltYWdlRGF0YShjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICBpbWFnZURhdGEuZGF0YS5zZXQocGl4ZWxzKTtcbiAgICAgICAgY3R4IS5wdXRJbWFnZURhdGEoaW1hZ2VEYXRhLCAwLCAwKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHsgfVxuICAgIHJldHVybiBjYW52YXM7XG4gIH1cbn1cbiJdfQ==