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

求助:PHP无法将RTF中的位图转换为HTML图片的解决方案

解决RTF中缺失头部的BMP位图转换问题
  • 手动补全BMP文件头
    RTF里的位图数据一般只包含DIB(设备无关位图)部分,缺了14字节的文件头。你可以手动拼上这部分头部:

    1. 算好文件总大小:14字节(文件头)加上从RTF里提取的位图数据长度
    2. 构造14字节的文件头:
      • 前2字节固定是BM(BMP的标识)
      • 接下来4字节填文件总大小(注意用小端字节序)
      • 最后8字节固定写00 00 00 00 36 00 00 00(因为DIB头通常40字节,文件头+DIB头刚好54字节,偏移量就设为54)
    3. 把构造好的头部和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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:19:57