summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/MediaProxyServerService.ts
diff options
context:
space:
mode:
authortamaina <tamaina@hotmail.co.jp>2022-12-30 12:00:50 +0900
committerGitHub <noreply@github.com>2022-12-30 12:00:50 +0900
commit8b46edeccf5a8907afbb871e3eb5b3b8eef967a8 (patch)
tree1411e540282c4b0d2365d3a2c7e01902a3403a3a /packages/backend/src/server/MediaProxyServerService.ts
parentfix(client): fix position calculation of nested context menu (diff)
downloadsharkey-8b46edeccf5a8907afbb871e3eb5b3b8eef967a8.tar.gz
sharkey-8b46edeccf5a8907afbb871e3eb5b3b8eef967a8.tar.bz2
sharkey-8b46edeccf5a8907afbb871e3eb5b3b8eef967a8.zip
enhance: Proxy custom emojis to reduce image size and accelerate the frontend (#9431)
* fix(server): /emoji to accept `@.` host expression * fix(client): use MkEmoji for custom emoji in MkEmojiPicker * change convertToWebp * nanka iroiro * remove * fix * nearLosslessは労多くして益少なしなのでやめる * do not cleanup tmp for development * update sharp.js to 0.31.3 * mixed: true * fix MkAutocomplete of 912791b3ab * clean up * https://github.com/misskey-dev/misskey/pull/9431#discussion_r1059215943
Diffstat (limited to 'packages/backend/src/server/MediaProxyServerService.ts')
-rw-r--r--packages/backend/src/server/MediaProxyServerService.ts25
1 files changed, 19 insertions, 6 deletions
diff --git a/packages/backend/src/server/MediaProxyServerService.ts b/packages/backend/src/server/MediaProxyServerService.ts
index 7355afcb98..4491a17545 100644
--- a/packages/backend/src/server/MediaProxyServerService.ts
+++ b/packages/backend/src/server/MediaProxyServerService.ts
@@ -9,7 +9,7 @@ import type { Config } from '@/config.js';
import { isMimeImage } from '@/misc/is-mime-image.js';
import { createTemp } from '@/misc/create-temp.js';
import { DownloadService } from '@/core/DownloadService.js';
-import { ImageProcessingService } from '@/core/ImageProcessingService.js';
+import { ImageProcessingService, webpDefault } from '@/core/ImageProcessingService.js';
import type { IImage } from '@/core/ImageProcessingService.js';
import { FILE_TYPE_BROWSERSAFE } from '@/const.js';
import { StatusError } from '@/misc/status-error.js';
@@ -81,8 +81,21 @@ export class MediaProxyServerService {
const isConvertibleImage = isMimeImage(mime, 'sharp-convertible-image');
let image: IImage;
-
- if ('static' in request.query && isConvertibleImage) {
+ if ('emoji' in request.query && isConvertibleImage) {
+ const data = await sharp(path, { animated: !('static' in request.query) })
+ .resize({
+ height: 128,
+ withoutEnlargement: true,
+ })
+ .webp(webpDefault)
+ .toBuffer();
+
+ image = {
+ data,
+ ext: 'webp',
+ type: 'image/webp',
+ };
+ } else if ('static' in request.query && isConvertibleImage) {
image = await this.imageProcessingService.convertToWebp(path, 498, 280);
} else if ('preview' in request.query && isConvertibleImage) {
image = await this.imageProcessingService.convertToWebp(path, 200, 200);
@@ -91,7 +104,7 @@ export class MediaProxyServerService {
// 画像でないなら404でお茶を濁す
throw new StatusError('Unexpected mime', 404);
}
-
+
const mask = sharp(path)
.resize(96, 96, {
fit: 'inside',
@@ -121,8 +134,8 @@ export class MediaProxyServerService {
ext: 'png',
type: 'image/png',
};
- } else if (mime === 'image/svg+xml') {
- image = await this.imageProcessingService.convertToWebp(path, 2048, 2048, 1);
+ } else if (mime === 'image/svg+xml') {
+ image = await this.imageProcessingService.convertToWebp(path, 2048, 2048, webpDefault);
} else if (!mime.startsWith('image/') || !FILE_TYPE_BROWSERSAFE.includes(mime)) {
throw new StatusError('Rejected type', 403, 'Rejected type');
} else {