Implement image resizing
This commit is contained in:
@@ -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
31
src/utils/imageResizer.js
Normal 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}`);
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user