如何在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
相关产品推荐
相关产品推荐

