Implement image resizing

This commit is contained in:
Elliot DeNolf
2019-01-22 00:41:39 -05:00
parent 68f7a5a16b
commit b110b530a2
4 changed files with 53 additions and 10 deletions

View File

@@ -1,12 +1,6 @@
import mkdirp from 'mkdirp';
import { resize } from '../../src/utils/imageResizer';
const classifyFile = (file) => {
console.log(`File mimetype: ${file.mimetype}`);
if (file.mimetype.split('/')[0] === 'image') {
// TODO: Perform image specific operations
console.log('File classified as an image.');
}
};
function upload(req, res, next, config) {
if (Object.keys(req.files).length === 0) {
@@ -20,10 +14,13 @@ function upload(req, res, next, config) {
}
});
req.files.file.mv(`${config.staticDir}/${req.files.file.name}`, (err) => {
let outputFilepath = `${config.staticDir}/${req.files.file.name}`;
req.files.file.mv(outputFilepath, (err) => {
if (err) return res.status(500).send(err);
classifyFile(req.files.file);
if (req.files.file.mimetype.split('/')[0] === 'image') {
resize(config, req.files.file);
}
res.send('File uploaded.');
})
}

31
src/utils/imageResizer.js Normal file
View File

@@ -0,0 +1,31 @@
import sharp from 'sharp';
import sizeOf from 'image-size';
function getOutputImageName(sourceImage, size) {
let extension = sourceImage.split('.').pop();
let filenameWithoutExtension = sourceImage.substr(0, sourceImage.lastIndexOf('.')) || sourceImage;
return `${filenameWithoutExtension}-${size.name}.${extension}`;
}
export function resize(config, file) {
let sourceImage = `${config.staticDir}/${file.name}`;
sizeOf(sourceImage, (err, dimensions) => {
for (let size of config.imageSizes) {
if (size.width > dimensions.width) {
console.log(`${size.width} is greater than actual width ${dimensions.width}`);
continue;
}
let outputImage = getOutputImageName(sourceImage, size);
sharp(sourceImage)
.resize(size.width, size.height, {
position: size.crop || 'centre'
})
.toFile(outputImage, (err) => {
if (err) console.log('Error writing resized file', err);
console.log(`Resized image from ${dimensions.width}x${dimensions.height} to ${size.width}x${size.height}`);
});
}
});
}