PhpPresentation imagecreatefromstring():数据不是可识别的格式-PHP7.2

时间:2018-08-01 13:40:42

标签: php phppresentation

我正在尝试使用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);

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

2 个答案:

答案 0 :(得分:5)

窥探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文件支持的图像格式的列表,但是找不到准确的响应。
我发现的唯一相关链接如下:

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

答案 1 :(得分:0)

将pptx再次以PPT 2007格式保存在开放办公室或MS Powerpoint中。它的格式问题。您正在使用2007打开最新的PPT格式