From 2cbd9745d2550e841ccc62a63a58118df92535d3 Mon Sep 17 00:00:00 2001 From: SengokuCola <1026294844@qq.com> Date: Mon, 16 Jun 2025 13:47:25 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BC=98=E5=8C=96=E8=A1=A8?= =?UTF-8?q?=E6=83=85=E5=8C=85ascii=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/emoji_system/emoji_manager.py | 6 ++++++ src/chat/utils/utils_image.py | 19 +++++++++++++++++-- src/llm_models/utils_model.py | 3 +++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/chat/emoji_system/emoji_manager.py b/src/chat/emoji_system/emoji_manager.py index 56461d8b7..d1e5f6136 100644 --- a/src/chat/emoji_system/emoji_manager.py +++ b/src/chat/emoji_system/emoji_manager.py @@ -74,6 +74,9 @@ class MaiEmoji: # 计算哈希值 logger.debug(f"[初始化] 正在解码Base64并计算哈希: {self.filename}") + # 确保base64字符串只包含ASCII字符 + if isinstance(image_base64, str): + image_base64 = image_base64.encode('ascii', errors='ignore').decode('ascii') image_bytes = base64.b64decode(image_base64) self.hash = hashlib.md5(image_bytes).hexdigest() logger.debug(f"[初始化] 哈希计算成功: {self.hash}") @@ -841,6 +844,9 @@ class EmojiManager: """ try: # 解码图片并获取格式 + # 确保base64字符串只包含ASCII字符 + if isinstance(image_base64, str): + image_base64 = image_base64.encode('ascii', errors='ignore').decode('ascii') image_bytes = base64.b64decode(image_base64) image_format = Image.open(io.BytesIO(image_bytes)).format.lower() diff --git a/src/chat/utils/utils_image.py b/src/chat/utils/utils_image.py index 83afc76d7..b592b25b5 100644 --- a/src/chat/utils/utils_image.py +++ b/src/chat/utils/utils_image.py @@ -98,6 +98,9 @@ class ImageManager: """获取表情包描述,带查重和保存功能""" try: # 计算图片哈希 + # 确保base64字符串只包含ASCII字符 + if isinstance(image_base64, str): + image_base64 = image_base64.encode('ascii', errors='ignore').decode('ascii') image_bytes = base64.b64decode(image_base64) image_hash = hashlib.md5(image_bytes).hexdigest() image_format = Image.open(io.BytesIO(image_bytes)).format.lower() @@ -113,10 +116,10 @@ class ImageManager: if image_base64_processed is None: logger.warning("GIF转换失败,无法获取描述") return "[表情包(GIF处理失败)]" - prompt = "这是一个动态图表情包,每一张图代表了动态图的某一帧,黑色背景代表透明,使用1-2个词描述一下表情包表达的情感和内容,简短一些" + prompt = "这是一个动态图表情包,每一张图代表了动态图的某一帧,黑色背景代表透明,使用1-2个词描述一下表情包表达的情感和内容,简短一些,输出一段平文本" description, _ = await self._llm.generate_response_for_image(prompt, image_base64_processed, "jpg") else: - prompt = "这是一个表情包,请用使用几个词描述一下表情包所表达的情感和内容,简短一些" + prompt = "这是一个表情包,请用使用几个词描述一下表情包所表达的情感和内容,简短一些,输出一段平文本" description, _ = await self._llm.generate_response_for_image(prompt, image_base64, image_format) if description is None: @@ -175,6 +178,9 @@ class ImageManager: """获取普通图片描述,带查重和保存功能""" try: # 计算图片哈希 + # 确保base64字符串只包含ASCII字符 + if isinstance(image_base64, str): + image_base64 = image_base64.encode('ascii', errors='ignore').decode('ascii') image_bytes = base64.b64decode(image_base64) image_hash = hashlib.md5(image_bytes).hexdigest() image_format = Image.open(io.BytesIO(image_bytes)).format.lower() @@ -255,6 +261,9 @@ class ImageManager: Optional[str]: 拼接后的JPG图像的base64编码字符串, 或者在失败时返回None """ try: + # 确保base64字符串只包含ASCII字符 + if isinstance(gif_base64, str): + gif_base64 = gif_base64.encode('ascii', errors='ignore').decode('ascii') # 解码base64 gif_data = base64.b64decode(gif_base64) gif = Image.open(io.BytesIO(gif_data)) @@ -374,6 +383,9 @@ class ImageManager: try: # 生成图片ID # 计算图片哈希 + # 确保base64字符串只包含ASCII字符 + if isinstance(image_base64, str): + image_base64 = image_base64.encode('ascii', errors='ignore').decode('ascii') image_bytes = base64.b64decode(image_base64) image_hash = hashlib.md5(image_bytes).hexdigest() @@ -444,6 +456,9 @@ class ImageManager: """ try: # 计算图片哈希 + # 确保base64字符串只包含ASCII字符 + if isinstance(image_base64, str): + image_base64 = image_base64.encode('ascii', errors='ignore').decode('ascii') image_bytes = base64.b64decode(image_base64) image_hash = hashlib.md5(image_bytes).hexdigest() diff --git a/src/llm_models/utils_model.py b/src/llm_models/utils_model.py index 8edfff292..3740ab6cd 100644 --- a/src/llm_models/utils_model.py +++ b/src/llm_models/utils_model.py @@ -836,6 +836,9 @@ def compress_base64_image_by_scale(base64_data: str, target_size: int = 0.8 * 10 """ try: # 将base64转换为字节数据 + # 确保base64字符串只包含ASCII字符 + if isinstance(base64_data, str): + base64_data = base64_data.encode('ascii', errors='ignore').decode('ascii') image_data = base64.b64decode(base64_data) # 如果已经小于目标大小,直接返回原图