明天接到了一个从Excel内读取图片的需要,正在网上查找了一些材料,根本完成了本人的需要,不外因为查到的一些代码比拟长远,外面一些库办法曾经被移除了没有存正在了,以是不克不及间接移植到本人的名目里,需求略加改动一下。
(保举学习:PHP视频教程)
这里引见一下辨别应用phpspreadsheet以及PHPExcel扩大库来完成读取Excel内图片的性能:
PHPSpreadsheet
起首装置phpspreadsheet,因为线上效劳器PHP版本是PHP5.6,以是需求装置兼容PHP5.6的版本,这里装置1.8.2版本
composer require phpoffice/phpspreadsheet=1.8.2
而后就能够正在名目里应用了
use PhpOffice\PhpSpreadsheet\Cell\Coordinate; use PhpOffice\PhpSpreadsheet\IOFactory; $imageFilePath = './uploads/imgs/'; //图片内陆存储的门路 if (!file_exists($imageFilePath)) { //假如目次没有存正在则递归创立 mkdir($imageFilePath, 0777, true); } try { $inputFileName = './files/1.xlsx'; //蕴含图片的Excel文件 $objRead = IOFactory::createReader('Xlsx'); $objSpreadsheet = $objRead->load($inputFileName); $objWorksheet = $objSpreadsheet->getSheet(0); $data = $objWorksheet->toArray(); foreach ($objWorksheet->getDrawingCollection() as $drawing) { list($startColumn, $startRow) = Coordinate::coordinateFromString($drawing->getCoordinates()); $imageFileName = $drawing->getCoordinates() . mt_rand(1000, 9999); switch ($drawing->getExtension()) { case 'jpg': case 'jpeg': $imageFileName .= '.jpg'; $source = imagecreatefromjpeg($drawing->getPath()); imagejpeg($source, $imageFilePath . $imageFileName); break; case 'gif': $imageFileName .= '.gif'; $source = imagecreatefromgif($drawing->getPath()); imagegif($source, $imageFilePath . $imageFileName); break; case 'png': $imageFileName .= '.png'; $source = imagecreatefrompng($drawing->getPath()); imagepng($source, $imageFilePath, $imageFileName); break; } $startColumn = ABC2decimal($startColumn); $data[$startRow-1][$startColumn] = $imageFilePath . $imageFileName; } dump($data);die(); } catch (\Exception $e) { throw $e; } public function ABC2decimal($abc) { $ten = 0; $len = strlen($abc); for($i=1;$i<=$len;$i++){ $char = substr($abc,0-$i,1);//反向猎取单个字符 $int = ord($char); $ten += ($int-65)*pow(26,$i-1); } return $ten; }
能够看到,图片被读取并存到了内陆效劳器中
PHPExcel
PHPExcel完成从Excel文件里读取内容的办法以及phpspreadsheet简直同样,究竟结果phpspreadsheet就是正在PHPExcel根底上写的,不外PHPExcel因为曾经被烧毁了,以是倡议优先应用phpspreadsheet,假如原来名目里不断应用了PHPExcel也能够持续应用PHPExcel的办法
use PHPExcel_IOFactory; use PHPExcel_Cell; try { $inputFileName = './files/1.xlsx'; $inputFileType = PHPExcel_IOFactory::identify($inputFileName); $objReader = PHPExcel_IOFactory::createReader($inputFileType); $objPHPExcel = $objReader->load($inputFileName); } catch (\Exception $e) { die('加载文件发作谬误:"'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage()); } $sheet = $objPHPExcel->getSheet(0); $data = $sheet->toArray(); //该办法读取没有到图片,图片需独自解决 $imageFilePath = './uploads/imgs/'; //图片内陆存储的门路 if (!file_exists($imageFilePath)) { mkdir($imageFilePath, 0777, true); } //解决图片 foreach ($sheet->getDrawingCollection() as $img) { list($startColumn, $startRow) = PHPExcel_Cell::coordinateFromString($img->getCoordinates()); //猎取图片所外行以及列 $imageFileName = $img->getCoordinates() . mt_rand(1000, 9999); switch($img->getExtension()) { case 'jpg': case 'jpeg': $imageFileName .= '.jpeg'; $source = imagecreatefromjpeg($img->getPath()); imagejpeg($source, $imageFilePath.$imageFileName); break; case 'gif': $imageFileName .= '.gif'; $source = imagecreatefromgif($img->getPath()); imagejpeg($source, $imageFilePath.$imageFileName); break; case 'png': $imageFileName .= '.png'; $source = imagecreatefrompng($img->getPath()); imagejpeg($source, $imageFilePath.$imageFileName); break; } $startColumn = ABC2decimal($startColumn); $data[$startRow-1][$startColumn] = $imageFilePath . $imageFileName; } var_dump($data); public function ABC2decimal($abc) { $ten = 0; $len = strlen($abc); for($i=1;$i<=$len;$i++){ $char = substr($abc,0-$i,1);//反向猎取单个字符 $int = ord($char); $ten += ($int-65)*pow(26,$i-1); } return $ten; }
本文来自资源魔,php成绩栏目,欢送学习!
以上就是PHP若何读取Excel内的图片(附代码)的具体内容,更多请存眷资源魔其它相干文章!
标签: php php教程 php故障解决 php使用问题 读取excel
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
抱歉,评论功能暂时关闭!