diff --git a/package.json b/package.json index 6469ecef..520589d7 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "fast-xml-parser": "^4.3.6", "file-type": "^20.0.0", "globals": "^16.0.0", - "image-size": "^2.0.1", + "image-size": "^1.1.1", "json5": "^2.2.3", "multer": "^1.4.5-lts.1", "typescript": "^5.3.3", diff --git a/src/core/apis/file.ts b/src/core/apis/file.ts index d28d64d1..f058a15a 100644 --- a/src/core/apis/file.ts +++ b/src/core/apis/file.ts @@ -17,6 +17,8 @@ import fs from 'fs'; import fsPromises from 'fs/promises'; import { InstanceContext, NapCatCore, SearchResultItem } from '@/core'; import { fileTypeFromFile } from 'file-type'; +import imageSize from 'image-size'; +import { ISizeCalculationResult } from 'image-size/dist/types/interface'; import { RkeyManager } from '@/core/helper/rkey'; import { calculateFileMD5 } from '@/common/file'; import pathLib from 'node:path'; @@ -26,7 +28,6 @@ import { SendMessageContext } from '@/onebot/api'; import { getFileTypeForSendType } from '../helper/msg'; import { FFmpegService } from '@/common/ffmpeg'; import { rkeyDataType } from '../types/file'; -import { imageSizeFromFile } from 'image-size/dist/fromFile' export class NTQQFileApi { context: InstanceContext; @@ -43,7 +44,7 @@ export class NTQQFileApi { 'https://ss.xingzhige.com/music_card/rkey', // 国内 'https://secret-service.bietiaop.com/rkeys',//国内 ], - this.context.logger + this.context.logger ); } @@ -136,7 +137,7 @@ export class NTQQFileApi { if (fileSize === 0) { throw new Error('文件异常,大小为0'); } - const imageSize = await imageSizeFromFile(picPath); + const imageSize = await this.core.apis.FileApi.getImageSize(picPath); context.deleteAfterSentFiles.push(path); return { elementType: ElementType.PIC, @@ -300,18 +301,18 @@ export class NTQQFileApi { element.elementType === ElementType.FILE ) { switch (element.elementType) { - case ElementType.PIC: + case ElementType.PIC: element.picElement!.sourcePath = elementResults?.[elementIndex] ?? ''; - break; - case ElementType.VIDEO: + break; + case ElementType.VIDEO: element.videoElement!.filePath = elementResults?.[elementIndex] ?? ''; - break; - case ElementType.PTT: + break; + case ElementType.PTT: element.pttElement!.filePath = elementResults?.[elementIndex] ?? ''; - break; - case ElementType.FILE: + break; + case ElementType.FILE: element.fileElement!.filePath = elementResults?.[elementIndex] ?? ''; - break; + break; } elementIndex++; } @@ -355,6 +356,20 @@ export class NTQQFileApi { return completeRetData.filePath; } + async getImageSize(filePath: string): Promise { + return new Promise((resolve, reject) => { + imageSize(filePath, (err: Error | null, dimensions) => { + if (err) { + reject(new Error(err.message)); + } else if (!dimensions) { + reject(new Error('获取图片尺寸失败')); + } else { + resolve(dimensions); + } + }); + }); + } + async searchForFile(keys: string[]): Promise { const randomResultId = 100000 + Math.floor(Math.random() * 10000); let searchId = 0;