前提:
1:shape.shape_type == MSO_SHAPE_TYPE.EMBEDDED_OLE_OBJECT
2:shape.ole_format.prog_id == 'Paint.Picture'
提取ppt中嵌入的bmp图片(其他类型图片类推):
1:获取对应的ole对象
2:提取ole对象中的Ole10Native流数据
Ole10Native流是OLE对象的一部分,通常用于嵌入在Microsoft Office文档中的对象。以下是提取BMP文件的基本步骤:
-
获取Ole10Native流数据:确保你已经获取了包含Ole10Native流的文件,并能够读取其二进制数据。
-
解析Ole10Native流:
- Ole10Native流通常以特定的结构存储数据。首先,你需要解析这个流以提取嵌入的文件。
- Ole10Native流的前几个字节通常包含文件名、文件类型和文件大小等信息。你需要根据这些信息找到BMP文件的数据部分。
-
查找BMP文件数据:
- BMP文件通常以“BM”两个字节开头(即,十六进制的
42 4D
)。你需要在Ole10Native流中搜索这个标志,以确定BMP文件的开始位置。
- BMP文件通常以“BM”两个字节开头(即,十六进制的
-
提取BMP数据:
- 一旦找到BMP文件的起始位置,提取从该位置开始的所有数据,直到达到文件的末尾或根据文件大小信息确定的末尾。
- 将提取的数据保存为一个新的文件,并确保文件扩展名为
.bmp
。
-
验证和查看BMP文件:
- 打开提取的BMP文件,确保它可以被图像查看器正确打开,以验证提取过程的成功。
以下是一个简化的Python示例代码,展示如何从流中提取BMP文件:
def extract_bmp_from_ole10native(ole10native_data):
bmp_signature = b'BM'
bmp_start = ole10native_data.find(bmp_signature)
if bmp_start == -1:
raise ValueError("BMP signature not found in Ole10Native stream.")
# Assuming the rest of the stream is the BMP file
bmp_data = ole10native_data[bmp_start:]
# Write the BMP data to a file
with open('extracted_image.bmp', 'wb') as bmp_file:
bmp_file.write(bmp_data)
# Example usage
# ole10native_data = read_your_ole10native_stream()
# extract_bmp_from_ole10native(ole10native_data)
请根据实际情况调整此代码,特别是如果需要处理多个文件或不同类型的嵌入对象时。