Как я могу читать изображения из файла excel с помощью PHPExcel и сохранять изображения на сервере и отображать их? Расширением файла является .xlsx.
Мой код:
$objPHPExcel = PHPExcel_IOFactory::load($path); foreach ($objPHPExcel->getActiveSheet()->getDrawingCollection() as $drawing) { if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) { ob_start(); call_user_func( $drawing->getRenderingFunction(), $drawing->getImageResource() ); $imageContents = ob_get_contents(); ob_end_clean(); } }
Благодаря!!
$objPHPExcel->getActiveSheet()->getDrawingCollection()
вернет объект ArrayObject всех объектов изображения на активном листе.
Эти объекты будут либо объектами PHPExcel_Worksheet_Drawing, либо PHPExcel_Worksheet_MemoryDrawing: вы можете определить, используя с помощью [is_a ()] [1]. Затем вы можете использовать методы, соответствующие этому классу (как описано в API), либо для чтения данных изображения из файла (для объектов PHPExcel_Worksheet_Drawing), либо непосредственно из объекта PHPExcel_Worksheet_MemoryDrawing. Методы getName () и getDescription () могут использоваться для извлечения соответствующих значений для объекта изображения.
Обратите внимание, что также возможно иметь объекты изображения, связанные с заголовками печати:
$objPHPExcel->getActiveSheet()->getHeaderFooter()->getImages()
может использоваться для извлечения изображений из верхнего / нижнего колонтитула. Это массив объектов PHPExcel_Worksheet_HeaderFooterDrawing. Все методы PHPExcel_Worksheet_Drawing могут использоваться для извлечения файла изображения из этих объектов.
РЕДАКТИРОВАТЬ
Время подачи ложки.
Это позволит извлечь все изображения с текущего активного листа и записать их в файлы на сервере.
$objPHPExcel = PHPExcel_IOFactory::load($path); $i = 0; foreach ($objPHPExcel->getActiveSheet()->getDrawingCollection() as $drawing) { if ($drawing instanceof PHPExcel_Worksheet_MemoryDrawing) { ob_start(); call_user_func( $drawing->getRenderingFunction(), $drawing->getImageResource() ); $imageContents = ob_get_contents(); ob_end_clean(); switch ($drawing->getMimeType()) { case PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_PNG : $extension = 'png'; break; case PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_GIF: $extension = 'gif'; break; case PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_JPEG : $extension = 'jpg'; break; } } else { $zipReader = fopen($drawing->getPath(),'r'); $imageContents = ''; while (!feof($zipReader)) { $imageContents .= fread($zipReader,1024); } fclose($zipReader); $extension = $drawing->getExtension(); } $myFileName = '00_Image_'.++$i.'.'.$extension; file_put_contents($myFileName,$imageContents); }
Файлы называются
00_Image_n.extension
где n – число, начинающееся с 1, а расширение – соответствующее расширение (png, jpg, gif, что угодно) для типа изображения.