Skip to main content
Glama

batch_convert_images

Convert multiple image files in bulk to specified formats (JPG, PNG, WebP, etc.), adjust dimensions, quality, and maintain aspect ratio using the Image Converter MCP Server.

Instructions

批量转换多个图片文件

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
heightNo目标高度
input_filesNo上传的文件数据数组(与input_paths二选一)
input_pathsNo源图片文件路径数组(与input_files二选一)
maintain_aspect_ratioNo保持宽高比
output_directoryNo输出目录
output_formatYes目标格式
qualityNo压缩质量
widthNo目标宽度

Implementation Reference

  • Core handler function in ImageConverter class that performs batch image conversion, supporting both file paths and buffer data inputs.
    async batchConvertImages(options: BatchConvertOptions): Promise<BatchConvertResult[]> { const { input_paths, input_files, output_format, quality, width, height, maintain_aspect_ratio, output_directory } = options; const results: BatchConvertResult[] = []; // 处理文件路径方式 if (input_paths && input_paths.length > 0) { for (const inputPath of input_paths) { try { const outputPath = output_directory ? path.join(output_directory, this.generateOutputFilename(inputPath, output_format)) : this.generateOutputPath(inputPath, output_format); await this.convertImage({ input_path: inputPath, output_format, quality, width, height, maintain_aspect_ratio, output_path: outputPath }); results.push({ success: true, output_path: outputPath }); } catch (error) { results.push({ success: false, error: error instanceof Error ? error.message : String(error) }); } } } // 处理上传文件方式 if (input_files && input_files.length > 0) { for (const inputFile of input_files) { try { const outputPath = output_directory ? path.join(output_directory, this.generateOutputFilename(inputFile.filename, output_format)) : this.generateOutputPath(inputFile.filename, output_format); await this.convertImage({ input_data: inputFile.data, input_filename: inputFile.filename, output_format, quality, width, height, maintain_aspect_ratio, output_path: outputPath }); results.push({ success: true, output_path: outputPath }); } catch (error) { results.push({ success: false, error: error instanceof Error ? error.message : String(error) }); } } } return results; }
  • Zod validation schema for batch_convert_images tool input parameters.
    const BatchConvertArgsSchema = z.object({ input_paths: z.array(z.string()).optional().describe('源图片文件路径数组'), input_files: z.array(z.object({ data: z.string().describe('文件数据(Buffer或base64字符串)'), filename: z.string().describe('文件名') })).optional().describe('上传的文件数据数组'), output_format: z.string().describe('目标格式'), quality: z.number().min(1).max(100).optional().describe('压缩质量'), width: z.number().positive().optional().describe('目标宽度'), height: z.number().positive().optional().describe('目标高度'), maintain_aspect_ratio: z.boolean().default(true).describe('保持宽高比'), output_directory: z.string().optional().describe('输出目录(可选)') });
  • src/index.ts:112-172 (registration)
    Tool definition registration in the ListTools response, including name, description, and JSON input schema.
    name: 'batch_convert_images', description: '批量转换多个图片文件', inputSchema: { type: 'object', properties: { input_paths: { type: 'array', items: { type: 'string' }, description: '源图片文件路径数组(与input_files二选一)' }, input_files: { type: 'array', items: { type: 'object', properties: { data: { type: 'string', description: '文件数据(Buffer或base64字符串)' }, filename: { type: 'string', description: '文件名' } }, required: ['data', 'filename'] }, description: '上传的文件数据数组(与input_paths二选一)' }, output_format: { type: 'string', description: '目标格式' }, quality: { type: 'number', minimum: 1, maximum: 100, description: '压缩质量' }, width: { type: 'number', minimum: 1, description: '目标宽度' }, height: { type: 'number', minimum: 1, description: '目标高度' }, maintain_aspect_ratio: { type: 'boolean', default: true, description: '保持宽高比' }, output_directory: { type: 'string', description: '输出目录' } }, required: ['output_format'] } },
  • src/index.ts:221-262 (registration)
    Dispatch handler in CallToolRequest that validates args with schema and invokes the converter's batchConvertImages method, formats results.
    case 'batch_convert_images': { const validatedArgs = BatchConvertArgsSchema.parse(args); const results = await this.converter.batchConvertImages(validatedArgs); const successCount = results.filter(r => r.success).length; const failureCount = results.length - successCount; let resultText = `批量转换完成!\n成功:${successCount} 个文件\n失败:${failureCount} 个文件\n\n`; // 确定输入源的总数 const totalInputs = (validatedArgs.input_paths?.length || 0) + (validatedArgs.input_files?.length || 0); results.forEach((result, index) => { let inputName = `文件${index + 1}`; // 优先从input_paths获取名称 if (validatedArgs.input_paths && index < validatedArgs.input_paths.length) { inputName = validatedArgs.input_paths[index]; } // 然后从input_files获取名称 else if (validatedArgs.input_files) { const fileIndex = index - (validatedArgs.input_paths?.length || 0); if (fileIndex >= 0 && fileIndex < validatedArgs.input_files.length) { inputName = validatedArgs.input_files[fileIndex].filename; } } if (result.success) { resultText += `✓ ${inputName} -> ${result.output_path}\n`; } else { resultText += `✗ ${inputName}: ${result.error}\n`; } }); return { content: [ { type: 'text', text: resultText } ] }; }
  • TypeScript interface defining the input options for batchConvertImages.
    export interface BatchConvertOptions { input_paths?: string[]; input_files?: Array<{ data: Buffer | string; filename: string; }>; // 支持上传的文件数据 output_format: string; quality?: number; width?: number; height?: number; maintain_aspect_ratio?: boolean; output_directory?: string; }

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pickstar-2002/image-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server