hostr/lib/resize.js

73 lines
1.7 KiB
JavaScript
Raw Normal View History

2016-05-25 21:03:07 +01:00
import fs from 'mz/fs';
import lwip from 'lwip';
2015-07-09 23:01:43 +01:00
import debugname from 'debug';
const debug = debugname('hostr-api:resize');
2016-05-25 21:03:07 +01:00
function cover(path, type, size) {
return new Promise((resolve, reject) => {
lwip.open(path, type, (errIn, image) => {
debug('Image Opened');
if (errIn) {
reject(errIn);
}
2015-07-09 23:01:43 +01:00
2016-05-25 21:03:07 +01:00
image.cover(size.width, size.height, (errOut, resized) => {
debug('Image Resized');
if (errOut) {
reject(errOut);
}
2016-05-24 21:33:09 +01:00
2016-05-25 21:03:07 +01:00
resized.toBuffer(type, (errBuf, buffer) => {
debug('Image Buffered');
if (errBuf) {
reject(errBuf);
}
resolve(buffer);
});
});
});
});
}
2016-05-24 21:33:09 +01:00
2016-05-25 21:03:07 +01:00
function scale(path, type, size) {
2016-05-24 21:33:09 +01:00
return new Promise((resolve, reject) => {
2016-05-25 21:03:07 +01:00
lwip.open(path, type, (errIn, image) => {
debug('Image Opened');
2016-05-24 21:33:09 +01:00
if (errIn) {
2016-05-25 21:03:07 +01:00
reject(errIn);
2016-05-24 21:33:09 +01:00
}
2016-05-25 21:03:07 +01:00
2016-05-24 21:33:09 +01:00
image.cover(size.width, size.height, (errOut, resized) => {
2016-05-25 21:03:07 +01:00
debug('Image Resized');
2016-05-24 21:33:09 +01:00
if (errOut) {
2016-05-25 21:03:07 +01:00
reject(errOut);
2016-05-24 21:33:09 +01:00
}
2016-05-25 21:03:07 +01:00
resized.toBuffer(type, (errBuf, buffer) => {
debug('Image Buffered');
if (errBuf) {
reject(errBuf);
}
2016-05-24 21:33:09 +01:00
resolve(buffer);
});
});
});
});
2015-07-09 23:01:43 +01:00
}
2016-05-25 21:03:07 +01:00
2016-08-07 14:38:05 +01:00
export default function resize(path, type, currentSize, newSize) {
2016-05-25 21:03:07 +01:00
debug('Resizing');
const ratio = 970 / currentSize.width;
2016-08-07 14:38:05 +01:00
debug(newSize.width, ratio);
if (newSize.width <= 150) {
2016-05-25 21:03:07 +01:00
debug('Cover');
2016-08-07 14:38:05 +01:00
return cover(path, type, newSize);
} else if (newSize.width >= 970 && ratio < 1) {
2016-05-25 21:03:07 +01:00
debug('Scale');
2016-08-07 14:38:05 +01:00
newSize.height = currentSize.height * ratio; // eslint-disable-line no-param-reassign
return scale(path, type, newSize);
2016-05-25 21:03:07 +01:00
}
debug('Copy');
return fs.readFile(path);
}