Автогенерация эскизов

Дата публикации 02.01.2019

Класс для работы с изображениями в UMI.CMS. Возвращает путь к автогенерируему превью.


class umiThumb {
	constructor(path = '') {		
		this.isThumb = false;
		this.filepath = false;
		this.thumbpath = false;
		this.filename = false;
		this.thumbname = false;
		this.thumbWidth = false;
		this.thumbHeight = false;
		this.ext = false;		
		
		if (path) this._expolde(path);
	}
	
	_expolde(path) {

		let url = document.createElement('a');
		url.href = path;
		path = url.pathname;
		
		this._paths = path.split('/');
		this.filename = this._paths.slice(-1).join('');	
		
		if (this._paths[2] == 'autothumbs') this.isThumb = true;
		
		//paths
		if (this.isThumb) {
			this.thumbpath = this._paths.slice(0,-1).join('/');
			this._paths.splice(2,1);
			this.filepath = this._paths.slice(0,-1).join('/');
		} else {
			this.filepath = this._paths.slice(0,-1).join('/');
			this._paths.splice(2,0,'autothumbs');
			this.thumbpath = this._paths.slice(0,-1).join('/');
		}
		
		//names
		this.names = this.filename.split('.');
		this.ext = this.names.slice(-1).join('');
		this.filename = this.names.slice(0, -1).join('.');
		
		if (this.isThumb) {
			this.thumbname = this.filename;
			this._thumbparts = this.thumbname.split('_');
			this.filename = this._thumbparts.slice(0, -2).join('_');
			this._thumbsizes = this._thumbparts.slice(-2);
			//this._thumbsizes = this._thumbsizes.split('_');
			this.thumbWidth = this._thumbsizes[0];
			this.thumbHeight = this._thumbsizes[1];
		} 
	}
	
	getOriginalPath() {
		return `${this.filepath}/${this.filename}.${this.ext}`;
	}
	getThumbPath(width = false, height = false) {
		if (width) this.thumbWidth = width;
		if (height) this.thumbHeight = height;
		if (!this.thumbWidth || !this.thumbHeight) return false;
		
		this.thumbname = `${this.filename}_${this.thumbWidth}_${this.thumbHeight}`;
		
		return `${this.thumbpath}/${this.thumbname}.${this.ext}`;
	}	
}

 

При создании объекта ему передается локальный путь к оригинальному изображению. Метод getThumbPath возвращает путь к превью с заданными шириной и высотой.

	
let thumb = new umiThumb('/images/some-image-original.jpg');

//return path to new image: /images/autothumbs/some-image-original_500_auto.jpg
let path = thumb.getThumbPath(500, 'auto');