处理失败: 处理图片失败: WatermarkProtectionSystem.protect_image() got an unexpected keyword argument 'image'
watermark_protection/main.py中protect_image方法的签名是:def protect_image(self, image_path, logo_path, output_dir, ...)
- 而
app.py中调用时使用了错误的参数名:protected_image = watermark_system.protect_image( image=original_image, # ❌ 错误的参数名 fragments_count=..., # ❌ 不存在的参数 ... )
✅ 修改了 app.py 的两个地方:
/api/process路由 (第180行)/api/batch-upload路由 (第295行)
修改内容:
# ❌ 错误的调用方式
protected_image = watermark_system.protect_image(
image=original_image,
fragments_count=6,
...
)
# ✅ 正确的调用方式
protected_results = watermark_system.protect_image(
image_path=filepath,
logo_path=logo_path,
output_dir=PROCESSED_FOLDER,
copyright_info=params['copyright_info'] if params['add_invisible'] else None,
add_invisible_watermark=params['add_invisible']
)
output_path = protected_results['final_protected']处理失败: 处理图片失败: 'NoneType' object has no attribute 'read'
protect_image方法要求logo_path必须是有效的文件路径- 当
logo_path=None时,visible_watermark.apply_watermark()试图打开None文件,导致错误
✅ 修改了 watermark_protection/main.py:
更改前:
def protect_image(self,
image_path: str,
logo_path: str, # ❌ 必须非None
...):更改后:
def protect_image(self,
image_path: str,
logo_path: Optional[str] = None, # ✅ 可以为None
...):
...
# 如果没有logo,创建一个默认的文本logo
if logo_path is None:
from PIL import Image, ImageDraw
logo = Image.new('RGBA', (100, 50), color=(0, 0, 0, 0))
draw = ImageDraw.Draw(logo)
draw.text((10, 15), "WATERMARK", fill=(255, 100, 100, 200))
logo_path_temp = os.path.join(output_dir, '_temp_logo.png')
logo.save(logo_path_temp)
logo_path = logo_path_temp| 方面 | 修复前 | 修复后 |
|---|---|---|
| API参数 | ❌ 错误 | ✅ 正确 |
| logo_path=None | ❌ 崩溃 | ✅ 支持 |
| 错误处理 | ❌ 不清晰 | ✅ 清晰 |
| 测试脚本 | ❌ 无 | ✅ 有 |
- 修改行: 46-74
- 内容: 修改
protect_image方法签名和logo处理逻辑 - 影响: 核心功能修复
- 修改行: 180-190, 295-310
- 内容: 修复两个路由中的
protect_image调用 - 影响: Web API修复
- 用途: Web API快速测试脚本
- 运行方式:
python test_web_api.py
✅ 代码检查
python -c "from watermark_protection.main import WatermarkProtectionSystem; print('✅ 水印系统加载成功')"
python -c "from app import app; print('✅ Flask应用加载成功')"✅ Git提交
eaba2ca test: 添加Web API快速测试脚本
afb57ef fix: 修复protect_image方法处理logo_path为None的问题
python run_web_server.pyhttp://127.0.0.1:5000
- 拖拽或点击上传
- 选择参数
- 点击"生成水印"
# 确保Flask服务正在运行,然后:
python test_web_api.py| 项目 | 数量 |
|---|---|
| 修复的问题 | 2 |
| 修改的文件 | 2 |
| 新增文件 | 1 |
| Git提交数 | 2 |
所有问题已解决,Web应用可以正常使用!
最后一次提交: eaba2ca - "test: 添加Web API快速测试脚本"
修复完成时间: 2025-12-21