mirror of
https://github.com/CaramelFur/Picsur.git
synced 2025-11-07 04:35:38 +01:00
fix bmp support
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import * as bmp from '@vingle/bmp-js';
|
||||
import icoToPng from 'ico-to-png';
|
||||
import { AsyncFailable, Fail } from 'picsur-shared/dist/types';
|
||||
import sharp from 'sharp';
|
||||
@@ -11,6 +12,11 @@ import {
|
||||
|
||||
@Injectable()
|
||||
export class ImageProcessorService {
|
||||
private readonly PngOptions = {
|
||||
compressionLevel: 9,
|
||||
effort: 10,
|
||||
};
|
||||
|
||||
constructor(private readonly userPref: UsrPreferenceService) {}
|
||||
|
||||
public async process(
|
||||
@@ -44,29 +50,18 @@ export class ImageProcessorService {
|
||||
): AsyncFailable<Buffer> {
|
||||
let processedImage = image;
|
||||
|
||||
switch (mime.mime) {
|
||||
case ImageMime.ICO:
|
||||
processedImage = await icoToPng(processedImage, 512);
|
||||
mime.mime = ImageMime.PNG;
|
||||
break;
|
||||
|
||||
case ImageMime.BMP:
|
||||
case ImageMime.TIFF:
|
||||
case ImageMime.WEBP:
|
||||
case ImageMime.PNG:
|
||||
case ImageMime.JPEG:
|
||||
processedImage = await sharp(processedImage)
|
||||
.png({
|
||||
compressionLevel: 9,
|
||||
effort: 10,
|
||||
})
|
||||
.toBuffer();
|
||||
mime.mime = ImageMime.PNG;
|
||||
break;
|
||||
|
||||
default:
|
||||
return Fail('Unsupported mime type');
|
||||
if (mime.mime === ImageMime.ICO) {
|
||||
processedImage = await icoToPng(processedImage, 512);
|
||||
} else if (mime.mime === ImageMime.BMP) {
|
||||
processedImage = await this.bmpSharp(processedImage)
|
||||
.png(this.PngOptions)
|
||||
.toBuffer();
|
||||
} else {
|
||||
processedImage = await sharp(processedImage)
|
||||
.png(this.PngOptions)
|
||||
.toBuffer();
|
||||
}
|
||||
mime.mime = ImageMime.PNG;
|
||||
|
||||
return processedImage;
|
||||
}
|
||||
@@ -79,4 +74,15 @@ export class ImageProcessorService {
|
||||
// Apng and gif are stored as is for now
|
||||
return image;
|
||||
}
|
||||
|
||||
private bmpSharp(image: Buffer) {
|
||||
const bitmap = bmp.decode(image, true);
|
||||
return sharp(bitmap.data, {
|
||||
raw: {
|
||||
width: bitmap.width,
|
||||
height: bitmap.height,
|
||||
channels: 4,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user