Save dimensions for svg and gif images

This commit is contained in:
Pierre Noël 2022-06-16 17:38:14 +01:00
parent 02768b6fff
commit c69ac511f4
2 changed files with 53 additions and 33 deletions

View File

@ -9,7 +9,8 @@ const sharp = require('sharp');
const { getService } = require('../utils');
const { bytesToKbytes } = require('../utils/file');
const FORMATS_TO_PROCESS = ['jpeg', 'png', 'webp', 'tiff'];
const FORMATS_TO_PROCESS = ['jpeg', 'png', 'webp', 'tiff', 'svg', 'gif'];
const FORMATS_TO_OPTIMIZE = ['jpeg', 'png', 'webp', 'tiff'];
const writeStreamToFile = (stream, path) =>
new Promise((resolve, reject) => {
@ -159,7 +160,19 @@ const breakpointSmallerThan = (breakpoint, { width, height }) => {
return breakpoint < width || breakpoint < height;
};
const isSupportedImage = async file => {
const isOptimizableImage = async file => {
let format;
try {
const metadata = await getMetadata(file);
format = metadata.format;
} catch (e) {
// throw when the file is not a supported image
return false;
}
return format && FORMATS_TO_OPTIMIZE.includes(format);
};
const isImage = async file => {
let format;
try {
const metadata = await getMetadata(file);
@ -172,7 +185,8 @@ const isSupportedImage = async file => {
};
module.exports = () => ({
isSupportedImage,
isOptimizableImage,
isImage,
getDimensions,
generateResponsiveFormats,
generateThumbnail,

View File

@ -117,9 +117,9 @@ module.exports = ({ strapi }) => ({
);
currentFile.getStream = () => fs.createReadStream(file.path);
const { optimize, isSupportedImage } = strapi.plugin('upload').service('image-manipulation');
const { optimize, isOptimizableImage } = strapi.plugin('upload').service('image-manipulation');
if (!(await isSupportedImage(currentFile))) {
if (!(await isOptimizableImage(currentFile))) {
return currentFile;
}
@ -162,11 +162,13 @@ module.exports = ({ strapi }) => ({
getDimensions,
generateThumbnail,
generateResponsiveFormats,
isSupportedImage,
isImage,
isOptimizableImage,
} = getService('image-manipulation');
await getService('provider').upload(fileData);
if (await isSupportedImage(fileData)) {
if (await isImage(fileData)) {
if (await isOptimizableImage(fileData)) {
const thumbnailFile = await generateThumbnail(fileData);
if (thumbnailFile) {
await getService('provider').upload(thumbnailFile);
@ -185,6 +187,7 @@ module.exports = ({ strapi }) => ({
_.set(fileData, ['formats', key], file);
}
}
}
const { width, height } = await getDimensions(fileData);
@ -193,6 +196,7 @@ module.exports = ({ strapi }) => ({
height,
});
}
_.set(fileData, 'provider', config.provider);
return this.add(fileData, { user });
@ -260,9 +264,10 @@ module.exports = ({ strapi }) => ({
// clear old formats
_.set(fileData, 'formats', {});
const { isSupportedImage } = getService('image-manipulation');
const { isImage, isOptimizableImage } = getService('image-manipulation');
if (await isSupportedImage(fileData)) {
if (await isImage(fileData)) {
if (await isOptimizableImage(fileData)) {
const thumbnailFile = await generateThumbnail(fileData);
if (thumbnailFile) {
await getService('provider').upload(thumbnailFile);
@ -281,6 +286,7 @@ module.exports = ({ strapi }) => ({
_.set(fileData, ['formats', key], file);
}
}
}
const { width, height } = await getDimensions(fileData);