Skip to main content
Glama

rotate_image

Rotate images by a specified angle, clockwise or counterclockwise, with options to expand the canvas or crop and define background fill color. Part of the Image Processing MCP Server.

Instructions

旋转图片

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
angleYes旋转角度(度),正值为顺时针,负值为逆时针
expandNo是否扩展画布以容纳旋转后的图片,False会裁剪
fill_colorNo填充颜色,十六进制格式如 #FFFFFF(白色)#FFFFFF
image_sourceYes图片源,可以是文件路径或base64编码的图片数据

Implementation Reference

  • Core implementation of the rotate_image tool. Loads image from base64, validates parameters, rotates using PIL.Image.rotate, outputs base64 result with metadata.
    async def rotate_image(image_data: str, angle: float, expand: bool = True, fill_color: str = "#FFFFFF") -> list[TextContent]: """ 旋转图片 Args: image_data: 图片数据(base64编码) angle: 旋转角度(度,正值为顺时针) expand: 是否扩展画布 fill_color: 填充颜色 Returns: 旋转后的图片数据 """ try: # 验证参数 if not image_data: raise ValidationError("图片数据不能为空") if not validate_color_hex(fill_color): raise ValidationError(f"无效的颜色格式: {fill_color}") # 加载图片 image = processor.load_image(image_data) original_size = image.size # 转换颜色格式 fill_rgb = tuple(int(fill_color[i:i+2], 16) for i in (1, 3, 5)) # 旋转图片 rotated_image = image.rotate( -angle, # PIL中负值为顺时针 expand=expand, fillcolor=fill_rgb ) # 输出旋转后的图片 output_info = processor.output_image(rotated_image, f"rotate_{int(angle)}deg") result = { "success": True, "message": f"图片旋转成功: {angle}度", "data": { **output_info, "original_size": original_size, "rotated_size": rotated_image.size, "angle": angle, "expand": expand, "fill_color": fill_color } } return [TextContent(type="text", text=json.dumps(result, ensure_ascii=False))] except ValidationError as e: error_result = { "success": False, "error": f"参数验证失败: {str(e)}" } return [TextContent(type="text", text=json.dumps(error_result, ensure_ascii=False))] except Exception as e: error_result = { "success": False, "error": f"图片旋转失败: {str(e)}" } return [TextContent(type="text", text=json.dumps(error_result, ensure_ascii=False))]
  • main.py:206-222 (registration)
    MCP server tool registration for 'rotate_image' using FastMCP @mcp.tool() decorator. Thin wrapper that safely calls the core handler from tools.transform.
    @mcp.tool() def rotate_image( image_source: Annotated[str, Field(description="图片源,可以是文件路径或base64编码的图片数据")], angle: Annotated[float, Field(description="旋转角度(度),正值为顺时针,负值为逆时针")], expand: Annotated[bool, Field(description="是否扩展画布以容纳旋转后的图片,False会裁剪", default=True)], fill_color: Annotated[str, Field(description="填充颜色,十六进制格式如 #FFFFFF(白色)", default="#FFFFFF")] ) -> str: """旋转图片""" try: result = safe_run_async(transform_rotate_image(image_source, angle, expand, fill_color)) return result[0].text except Exception as e: return json.dumps({ "success": False, "error": f"旋转图片失败: {str(e)}" }, ensure_ascii=False, indent=2)
  • Input schema definition for rotate_image tool as part of get_transform_tools(), matching the MCP schema generated in main.py.
    Tool( name="rotate_image", description="旋转图片", inputSchema={ "type": "object", "properties": { "image_data": { "type": "string", "description": "图片数据(base64编码)" }, "angle": { "type": "number", "description": "旋转角度(度,正值为顺时针)" }, "expand": { "type": "boolean", "description": "是否扩展画布以容纳旋转后的图片", "default": True }, "fill_color": { "type": "string", "description": "填充颜色(十六进制格式,如#FFFFFF)", "default": "#FFFFFF" } }, "required": ["image_data", "angle"] } ),

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/duke0317/ps-mcp'

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