mirror of
https://github.com/strapi/strapi.git
synced 2025-10-29 17:04:13 +00:00
Save dimensions for svg and gif images
This commit is contained in:
parent
02768b6fff
commit
c69ac511f4
@ -9,7 +9,8 @@ const sharp = require('sharp');
|
|||||||
const { getService } = require('../utils');
|
const { getService } = require('../utils');
|
||||||
const { bytesToKbytes } = require('../utils/file');
|
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) =>
|
const writeStreamToFile = (stream, path) =>
|
||||||
new Promise((resolve, reject) => {
|
new Promise((resolve, reject) => {
|
||||||
@ -159,7 +160,19 @@ const breakpointSmallerThan = (breakpoint, { width, height }) => {
|
|||||||
return breakpoint < width || breakpoint < 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;
|
let format;
|
||||||
try {
|
try {
|
||||||
const metadata = await getMetadata(file);
|
const metadata = await getMetadata(file);
|
||||||
@ -172,7 +185,8 @@ const isSupportedImage = async file => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.exports = () => ({
|
module.exports = () => ({
|
||||||
isSupportedImage,
|
isOptimizableImage,
|
||||||
|
isImage,
|
||||||
getDimensions,
|
getDimensions,
|
||||||
generateResponsiveFormats,
|
generateResponsiveFormats,
|
||||||
generateThumbnail,
|
generateThumbnail,
|
||||||
|
|||||||
@ -117,9 +117,9 @@ module.exports = ({ strapi }) => ({
|
|||||||
);
|
);
|
||||||
currentFile.getStream = () => fs.createReadStream(file.path);
|
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;
|
return currentFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,11 +162,13 @@ module.exports = ({ strapi }) => ({
|
|||||||
getDimensions,
|
getDimensions,
|
||||||
generateThumbnail,
|
generateThumbnail,
|
||||||
generateResponsiveFormats,
|
generateResponsiveFormats,
|
||||||
isSupportedImage,
|
isImage,
|
||||||
|
isOptimizableImage,
|
||||||
} = getService('image-manipulation');
|
} = getService('image-manipulation');
|
||||||
await getService('provider').upload(fileData);
|
await getService('provider').upload(fileData);
|
||||||
|
|
||||||
if (await isSupportedImage(fileData)) {
|
if (await isImage(fileData)) {
|
||||||
|
if (await isOptimizableImage(fileData)) {
|
||||||
const thumbnailFile = await generateThumbnail(fileData);
|
const thumbnailFile = await generateThumbnail(fileData);
|
||||||
if (thumbnailFile) {
|
if (thumbnailFile) {
|
||||||
await getService('provider').upload(thumbnailFile);
|
await getService('provider').upload(thumbnailFile);
|
||||||
@ -185,6 +187,7 @@ module.exports = ({ strapi }) => ({
|
|||||||
_.set(fileData, ['formats', key], file);
|
_.set(fileData, ['formats', key], file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const { width, height } = await getDimensions(fileData);
|
const { width, height } = await getDimensions(fileData);
|
||||||
|
|
||||||
@ -193,6 +196,7 @@ module.exports = ({ strapi }) => ({
|
|||||||
height,
|
height,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_.set(fileData, 'provider', config.provider);
|
_.set(fileData, 'provider', config.provider);
|
||||||
|
|
||||||
return this.add(fileData, { user });
|
return this.add(fileData, { user });
|
||||||
@ -260,9 +264,10 @@ module.exports = ({ strapi }) => ({
|
|||||||
// clear old formats
|
// clear old formats
|
||||||
_.set(fileData, '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);
|
const thumbnailFile = await generateThumbnail(fileData);
|
||||||
if (thumbnailFile) {
|
if (thumbnailFile) {
|
||||||
await getService('provider').upload(thumbnailFile);
|
await getService('provider').upload(thumbnailFile);
|
||||||
@ -281,6 +286,7 @@ module.exports = ({ strapi }) => ({
|
|||||||
_.set(fileData, ['formats', key], file);
|
_.set(fileData, ['formats', key], file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const { width, height } = await getDimensions(fileData);
|
const { width, height } = await getDimensions(fileData);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user