mirror of
https://github.com/diced/zipline.git
synced 2025-12-05 20:40:12 -08:00
fix: #926 animated compression removes animation
This commit is contained in:
@@ -189,6 +189,8 @@ export function uploadFiles(
|
|||||||
options.format !== 'default' && req.setRequestHeader('x-zipline-format', options.format);
|
options.format !== 'default' && req.setRequestHeader('x-zipline-format', options.format);
|
||||||
options.imageCompressionPercent &&
|
options.imageCompressionPercent &&
|
||||||
req.setRequestHeader('x-zipline-image-compression-percent', options.imageCompressionPercent.toString());
|
req.setRequestHeader('x-zipline-image-compression-percent', options.imageCompressionPercent.toString());
|
||||||
|
options.imageCompressionFormat !== 'default' &&
|
||||||
|
req.setRequestHeader('x-zipline-image-compression-type', options.imageCompressionFormat);
|
||||||
options.maxViews && req.setRequestHeader('x-zipline-max-views', options.maxViews.toString());
|
options.maxViews && req.setRequestHeader('x-zipline-max-views', options.maxViews.toString());
|
||||||
options.addOriginalName && req.setRequestHeader('x-zipline-original-name', 'true');
|
options.addOriginalName && req.setRequestHeader('x-zipline-original-name', 'true');
|
||||||
options.overrides_returnDomain && req.setRequestHeader('x-zipline-domain', options.overrides_returnDomain);
|
options.overrides_returnDomain && req.setRequestHeader('x-zipline-domain', options.overrides_returnDomain);
|
||||||
|
|||||||
@@ -250,6 +250,8 @@ export async function uploadPartialFiles(
|
|||||||
'x-zipline-image-compression-percent',
|
'x-zipline-image-compression-percent',
|
||||||
options.imageCompressionPercent.toString(),
|
options.imageCompressionPercent.toString(),
|
||||||
);
|
);
|
||||||
|
options.imageCompressionFormat !== 'default' &&
|
||||||
|
req.setRequestHeader('x-zipline-image-compression-type', options.imageCompressionFormat);
|
||||||
options.maxViews && req.setRequestHeader('x-zipline-max-views', options.maxViews.toString());
|
options.maxViews && req.setRequestHeader('x-zipline-max-views', options.maxViews.toString());
|
||||||
options.addOriginalName && req.setRequestHeader('x-zipline-original-name', 'true');
|
options.addOriginalName && req.setRequestHeader('x-zipline-original-name', 'true');
|
||||||
options.overrides_returnDomain &&
|
options.overrides_returnDomain &&
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { extname } from 'path';
|
||||||
import sharp from 'sharp';
|
import sharp from 'sharp';
|
||||||
|
|
||||||
export const COMPRESS_TYPES = ['jpg', 'jpeg', 'png', 'webp', 'jxl'] as const;
|
export const COMPRESS_TYPES = ['jpg', 'jpeg', 'png', 'webp', 'jxl'] as const;
|
||||||
@@ -22,7 +23,9 @@ export function checkOutput(type: CompressType): boolean {
|
|||||||
export async function compressFile(filePath: string, options: CompressOptions): Promise<CompressResult> {
|
export async function compressFile(filePath: string, options: CompressOptions): Promise<CompressResult> {
|
||||||
const { quality, type } = options;
|
const { quality, type } = options;
|
||||||
|
|
||||||
const image = sharp(filePath).withMetadata();
|
const animated = ['.gif', '.webp', '.avif', '.tiff'].includes(extname(filePath).toLowerCase());
|
||||||
|
|
||||||
|
const image = sharp(filePath, { animated }).withMetadata();
|
||||||
|
|
||||||
const result: CompressResult = {
|
const result: CompressResult = {
|
||||||
mimetype: '',
|
mimetype: '',
|
||||||
@@ -56,7 +59,7 @@ export async function compressFile(filePath: string, options: CompressOptions):
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
await sharp(buffer).toFile(filePath);
|
await sharp(buffer, { animated }).toFile(filePath);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -185,6 +185,7 @@ export function parseHeaders(headers: UploadHeaders, fileConfig: Config['files']
|
|||||||
|
|
||||||
const imageCompressionPercent = headers['x-zipline-image-compression-percent'];
|
const imageCompressionPercent = headers['x-zipline-image-compression-percent'];
|
||||||
const imageCompressionType = headers['x-zipline-image-compression-type'];
|
const imageCompressionType = headers['x-zipline-image-compression-type'];
|
||||||
|
|
||||||
if (imageCompressionType) {
|
if (imageCompressionType) {
|
||||||
if (!imageCompressionPercent)
|
if (!imageCompressionPercent)
|
||||||
return headerError(
|
return headerError(
|
||||||
|
|||||||
Reference in New Issue
Block a user