PHP如何读取Excel内的图片(附代码)-PHP问题

资源魔 26 0

明天接到了一个从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

抱歉,评论功能暂时关闭!