求助:PHP无法将RTF中的位图转换为HTML图片的解决方案
解决RTF中缺失头部的BMP位图转换问题
手动补全BMP文件头
RTF里的位图数据一般只包含DIB(设备无关位图)部分,缺了14字节的文件头。你可以手动拼上这部分头部:- 算好文件总大小:14字节(文件头)加上从RTF里提取的位图数据长度
- 构造14字节的文件头:
- 前2字节固定是
BM(BMP的标识) - 接下来4字节填文件总大小(注意用小端字节序)
- 最后8字节固定写
00 00 00 00 36 00 00 00(因为DIB头通常40字节,文件头+DIB头刚好54字节,偏移量就设为54)
- 前2字节固定是
- 把构造好的头部和RTF里的位图二进制数据拼在一起,再传给
imagecreatefromstring()就能处理了
修改roundcube/rtf-html-php的图片处理逻辑
找到包里处理位图的代码(比如ExtractImage()或者PrintImage()方法),在处理原始位图数据前自动补全头部。给个示例片段:// $bitmapData是从RTF提取的位图原始数据 $dibLength = strlen($bitmapData); $totalSize = 14 + $dibLength; // 打包生成BMP文件头 $fileHeader = pack('a2VvvV', 'BM', $totalSize, 0, 0, 54); $completeBmp = $fileHeader . $bitmapData; // 现在可以正常创建图片资源 $img = imagecreatefromstring($completeBmp);验证补全结果
拼接完数据后,可以先写入临时文件确认是否正常:file_put_contents('temp_test.bmp', $completeBmp);用图片查看器打开这个文件,能显示就说明头部补对了。
内容的提问来源于stack exchange,提问作者Peder
相关产品推荐
相关产品推荐

