You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python的Telethon中提取缩略图并通过send_file发送?

解决方案

你可以通过message.document.thumbs获取文档的缩略图列表,里面包含两种类型的缩略图:PhotoStrippedSize(自带二进制数据)和PhotoSize(需要下载)。以下是具体实现:

完整代码修改

将提取缩略图的逻辑加入你的现有代码:

async for message in client.iter_messages(-xxxxxxxxxxxxxx):
    if message.document:
        print("Documento: ", str(message.document))
        
        # 下载文档到内存
        blob = await client.download_media(message, bytes)
        
        # 提取文件名
        filename_attr = next(filter(lambda x: isinstance(x, DocumentAttributeFilename), message.document.attributes), None)
        filename = filename_attr.file_name if filename_attr else 'Unknown'
        print("Filename: ", filename)
        
        # 提取缩略图数据
        thumb_data = None
        if message.document.thumbs:
            # 优先选择分辨率更高的PhotoSize类型缩略图,下载其字节数据
            photo_size = next((t for t in message.document.thumbs if isinstance(t, PhotoSize)), None)
            if photo_size:
                thumb_data = await client.download_media(photo_size, bytes)
            else:
                # 若只有PhotoStrippedSize,直接使用其自带的bytes属性
                stripped_thumb = next((t for t in message.document.thumbs if isinstance(t, PhotoStrippedSize)), None)
                if stripped_thumb:
                    thumb_data = stripped_thumb.bytes
        
        # 发送文档并传入缩略图
        await client.send_file(
            '+34629060331', 
            blob,
            caption="Ole!!!",
            attributes=[DocumentAttributeFilename(file_name=filename)],
            thumb=thumb_data,
            progress_callback=callback
        )

关键说明

  • PhotoSize类型的缩略图分辨率更高,需要通过download_media下载字节数据
  • PhotoStrippedSize已将缩略图二进制数据存在bytes属性中,可直接取用
  • 如果文档无缩略图,thumb参数传None即可,Telethon会自动处理

内容的提问来源于stack exchange,提问作者javichun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:27:18