Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

无法发送图片 #1892

Open
2 tasks done
MuskZhouMQ opened this issue Apr 14, 2024 · 6 comments
Open
2 tasks done

无法发送图片 #1892

MuskZhouMQ opened this issue Apr 14, 2024 · 6 comments

Comments

@MuskZhouMQ
Copy link

前置确认

  • 我确认我运行的是最新版本的代码,并且安装了所需的依赖,在FAQS中也未找到类似问题。

⚠️ 搜索issues中是否已存在类似问题

  • 我已经搜索过issues和disscussions,没有跟我遇到的问题相关的issue

操作系统类型?

Linux

运行的python版本是?

python 3.10

使用的chatgpt-on-wechat版本是?

Latest Release

运行的channel类型是?

wx(个人微信, itchat)

复现步骤 🕹

在聊天框输入画一个人类,无回复

问题描述 😯

日志显示已生成图片并且发送,但并未收到

终端日志 📒

[INFO][2024-04-14 13:37:31][open_ai_image.py:22] - [OPEN_AI] image_query=一个人类
[INFO][2024-04-14 13:37:32][wechat_channel.py:55] - Wechat message 2610636063098786311 already received, ignore
[INFO][2024-04-14 13:37:32][wechat_channel.py:55] - Wechat message 2610636063098786311 already received, ignore
[INFO][2024-04-14 13:37:32][wechat_channel.py:55] - Wechat message 2610636063098786311 already received, ignore
[INFO][2024-04-14 13:37:32][wechat_channel.py:55] - Wechat message 2610636063098786311 already received, ignore
[INFO][2024-04-14 13:37:32][wechat_channel.py:55] - Wechat message 2610636063098786311 already received, ignore
[INFO][2024-04-14 13:37:53][open_ai_image.py:31] - [OPEN_AI] image_url=https://filesystem.site/cdn/20240414/J3peFnSvWzqnN6COjijsJ48RAkKBGo.webp
[INFO][2024-04-14 13:37:55][wechat_channel.py:230] - [WX] download image success, size=325604, img_url=https://filesystem.site/cdn/20240414/J3peFnSvWzqnN6COjijsJ48RAkKBGo.webp
[INFO][2024-04-14 13:37:57][wechat_channel.py:233] - [WX] sendImage url=https://filesystem.site/cdn/20240414/J3peFnSvWzqnN6COjijsJ48RAkKBGo.webp, receiver=@48c7ca2950bf882c8744854398c1e3821e38cf131e85fd555a177c8dca5d84f7

@liangxuannb
Copy link

这确实是目前的问题,某些图片是webp格式的,回复不出来

@sbcxk
Copy link

sbcxk commented Apr 27, 2024

大佬有解决办法嘛,遇到同样的问题,图片生成了但无法~Docker部署的

@sbcxk
Copy link

sbcxk commented Apr 27, 2024

希望大佬能更新支持一下,可以用这种方式(发送图片后,同时返回文件链接)
image

@uluckyXH
Copy link

uluckyXH commented Jun 26, 2024

image
记得在上面加上:import uuid

    # 统一的发送函数,每个Channel自行实现,根据reply的type字段发送不同类型的消息
    def send(self, reply: Reply, context: Context):
        receiver = context["receiver"]
        if reply.type == ReplyType.TEXT:
            itchat.send(reply.content, toUserName=receiver)
            logger.info("[WX] sendMsg={}, receiver={}".format(reply, receiver))
        elif reply.type == ReplyType.ERROR or reply.type == ReplyType.INFO:
            itchat.send(reply.content, toUserName=receiver)
            logger.info("[WX] sendMsg={}, receiver={}".format(reply, receiver))
        elif reply.type == ReplyType.VOICE:
            itchat.send_file(reply.content, toUserName=receiver)
            logger.info("[WX] sendFile={}, receiver={}".format(reply.content, receiver))
        elif reply.type == ReplyType.IMAGE_URL:  # 从网络下载图片
            img_url = reply.content
            logger.debug(f"[WX] start download image, img_url={img_url}")
            pic_res = requests.get(img_url, stream=True)
            image_storage = io.BytesIO()
            size = 0
            for block in pic_res.iter_content(1024):
                size += len(block)
                image_storage.write(block)
            logger.info(f"[WX] download image success, size={size}, img_url={img_url}")
            image_storage.seek(0)

            # 添加对 .webp 图片格式的处理
            if img_url.endswith(".webp"):
                image_storage = self._convert_webp_to_png(image_storage)

            itchat.send_image(image_storage, toUserName=receiver)
            logger.info("[WX] sendImage url={}, receiver={}".format(img_url, receiver))
        elif reply.type == ReplyType.IMAGE:  # 从文件读取图片
            image_storage = reply.content
            image_storage.seek(0)

            # 添加对 .webp 图片格式的处理
            if image_storage.name.endswith(".webp"):
                image_storage = self._convert_webp_to_png(image_storage)

            itchat.send_image(image_storage, toUserName=receiver)
            logger.info("[WX] sendImage, receiver={}".format(receiver))
        elif reply.type == ReplyType.FILE:  # 新增文件回复类型
            file_storage = reply.content
            itchat.send_file(file_storage, toUserName=receiver)
            logger.info("[WX] sendFile, receiver={}".format(receiver))
        elif reply.type == ReplyType.VIDEO:  # 新增视频回复类型
            video_storage = reply.content
            itchat.send_video(video_storage, toUserName=receiver)
            logger.info("[WX] sendFile, receiver={}".format(receiver))
        elif reply.type == ReplyType.VIDEO_URL:  # 新增视频URL回复类型
            video_url = reply.content
            logger.debug(f"[WX] start download video, video_url={video_url}")
            video_res = requests.get(video_url, stream=True)
            video_storage = io.BytesIO()
            size = 0
            for block in video_res.iter_content(1024):
                size += len(block)
                video_storage.write(block)
            logger.info(f"[WX] download video success, size={size}, video_url={video_url}")
            video_storage.seek(0)
            itchat.send_video(video_storage, toUserName=receiver)
            logger.info("[WX] sendVideo url={}, receiver={}".format(video_url, receiver))

    def _convert_webp_to_png(self, webp_image):
        from PIL import Image
        webp_image.seek(0)
        img = Image.open(webp_image).convert("RGBA")
        png_image = io.BytesIO()
        unique_filename = f"{uuid.uuid4()}.png"
        img.save(png_image, format="PNG")
        png_image.name = unique_filename
        png_image.seek(0)
        return png_image

@sbcxk
Copy link

sbcxk commented Jun 27, 2024

感谢大佬 受教啦 👍 ,不过这个文件还需要加一个import uuid

@uluckyXH
Copy link

感谢大佬 受教啦 👍 ,不过这个文件还需要加一个import uuid

OK,我重新编辑了一下

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants