我正在尝试使用PhpPresentation根据其文档中读者的简单说明读取sample.pptx文件,并且得到:
imagecreatefromstring(): Data is not in a recognized format
我检查了是否已安装PHP7.2-gd以及所有其他依赖项。

我的代码:

require_once 'vendor/autoload.php';

use \PhpOffice\PhpPresentation\PhpPresentation;
use \PhpOffice\PhpPresentation\IOFactory;
use \PhpOffice\PhpPresentation\Style\Color;
use \PhpOffice\PhpPresentation\Style\Alignment;

$oReader = IOFactory::createReader('PowerPoint2007');
$data = $oReader->load(__DIR__ . '/sample.pptx');
var_dump($data);

有人可以帮助我了解这个问题吗?

最佳答案

探究the PHP source code之后,为了对“imagecreatefromstring”功能有一些见解,我发现它仅处理以下图像格式:

  • JPEG
  • PNG
  • GIF
  • WBM
  • GD2
  • BMP
  • WEBP

  • PHP通过检查图像签名来识别“imagecreatefromstring”函数的参数中包含的图像格式,如here所述。
    当检测到未知签名时,将发出警告“数据不是可识别的格式”。
    因此,对于您所遇到的错误的唯一合理的解释是,PPTX文件包含的图像不是上述格式之一。
    通过将扩展名从“.pptx”更改为“.zip”,然后打开它,可以查看PPTX文件中图像的格式。
    您应该会看到类似以下内容的内容:
    Archive:  sample.pptx
      Length      Date    Time    Name
    ---------  ---------- -----   ----
         5207  1980-01-01 00:00   [Content_Types].xml
          ...
         6979  1980-01-01 00:00   ppt/media/image1.jpeg
         6528  1980-01-01 00:00   ppt/media/image2.jpeg
       178037  1980-01-01 00:00   ppt/media/image3.jpeg
       229685  1980-01-01 00:00   ppt/media/image4.jpeg
       164476  1980-01-01 00:00   ppt/media/image5.jpeg
         6802  1980-01-01 00:00   ppt/media/image6.png
        19012  1980-01-01 00:00   ppt/media/image7.png
        32146  1980-01-01 00:00   ppt/media/image8.png
          ...
    ---------                     -------
       795623                     74 files
    

    如您所见,我的 sample.pptx 文件包含一些JPEG和PNG格式的图像。
    也许您的样本文件包含了一些带有矢量格式(WMF或EMF)图像的幻灯片。对我来说还不清楚(因为我没有在the docs中找到任何引用)是否支持这些格式。
    最终,您应该尝试使用其他PPTX文件,以确保该问题与特定的问题无关(您可以在“test/resources/files”下找到一些问题)。
    我已经搜索了PowerPoint文件支持的图像格式的列表,但是还没有找到确切的答案。
    我发现的唯一相关链接如下:
  • ECMA 376 Open Office XML 1st Edition - Image Part
  • Office Implementation Information for ISO/IEC 29500Standards Support(2.1.32第1部分第15.2.14节,图像部分,第57/58页)
  • Images in Open XML documents(阅读页面结尾的注释)
  • Question on OpenXML Developer Forum

  • 这意味着在PPTX文件中还存在TIFF或PICT(QuickDraw)格式的图像也可能导致所考虑的错误。

    关于PhpPresentation imagecreatefromstring(): Data is not in a recognized format - PHP7. 2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51634838/

    10-12 05:35