diff options
| author | tamaina <tamaina@hotmail.co.jp> | 2022-12-30 12:00:50 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-30 12:00:50 +0900 |
| commit | 8b46edeccf5a8907afbb871e3eb5b3b8eef967a8 (patch) | |
| tree | 1411e540282c4b0d2365d3a2c7e01902a3403a3a /packages/backend/src/server/MediaProxyServerService.ts | |
| parent | fix(client): fix position calculation of nested context menu (diff) | |
| download | sharkey-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.ts | 25 |
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 { |