MCP-LOGO-GEN
- tools
from typing import Optional
import aiohttp
import asyncio
import os
from urllib.parse import urlparse
import mimetypes
async def download_image_from_url(image_url: str, output_dir: str = "downloads") -> str:
"""
Download an image from a URL and save it locally.
"""
try:
# Create downloads directory if it doesn't exist
os.makedirs(output_dir, exist_ok=True)
# Extract filename from URL or generate one
parsed_url = urlparse(image_url)
filename = os.path.basename(parsed_url.path)
if not filename:
# If no filename in URL, create one based on timestamp
content_type = mimetypes.guess_type(image_url)[0]
ext = mimetypes.guess_extension(content_type) if content_type else '.jpg'
filename = f"image_{int(asyncio.get_event_loop().time())}{ext}"
output_path = os.path.join(output_dir, filename)
async with aiohttp.ClientSession() as session:
async with session.get(image_url) as response:
if response.status != 200:
return f"Error downloading image: HTTP {response.status}"
# Verify it's an image from content-type
content_type = response.headers.get('content-type', '')
if not content_type.startswith('image/'):
return f"Error: URL does not point to an image (content-type: {content_type})"
# Download and save the image
with open(output_path, 'wb') as f:
while True:
chunk = await response.content.read(8192)
if not chunk:
break
f.write(chunk)
return f"Image successfully downloaded to: {output_path}"
except Exception as e:
return f"Error downloading image: {str(e)}"