phpexcel로 xls 파일에서 사진을 php로 사진으로 출력하는 법 좀 알려 주세요

phpexcel로 xls 파일에서 사진을 php로 사진으로 출력하는 법 좀 알려 주세요

QA

phpexcel로 xls 파일에서 사진을 php로 사진으로 출력하는 법 좀 알려 주세요

본문

phpexcel로 xls 파일에서 사진을 php로 사진으로 올리고 궁금한 점이 있습니다

1. xls 파일 => 1406 X 702 

995547203_1685325562.5225.png

 

2. xls 등록하고

995547203_1685325810.2826.png

 

3. width가 504px 되여서 나와요...

995547203_1685325869.1787.png

 

width 1408px 원본 크기 대로 나오려면 어떻게 해야 돼요?

 



<?php
require_once "./PHPExcel/Classes/PHPExcel.php"; // PHPExcel.php을 불러와야 하며, 경로는 사용자의 설정에 맞게 수정해야 한다.
require_once "./PHPExcel/Classes/PHPExcel/IOFactory.php"; // IOFactory.php을 불러와야 하며, 경로는 사용자의 설정에 맞게 수정해야 한다.

$objPHPExcel = new PHPExcel();
$filename = 'x.xlsx'; // 서버에 올려진 파일을 직접 지정할 경우
// excel_upload.php 파일을 이용해 업로드 한 경우
//$filename = $_FILES['excelFile']['tmp_name'];

try {

    $file = $filename;  //Excel File

    //$subDir = "community/data/file/bestbike_bike/".date('Y') . '/' . date('m') . '/' . date('d') . '/';
    $subDir = "community/data/file/bestbike_bike/".date('Y') . '/' . date('m') . '/';
    $imageFilePath = "..".$basePath . '/';                 //图片保存目录
    if (!is_dir($imageFilePath . $subDir)) {        //如果目录不存在,则创建
        mkdir($imageFilePath . $subDir, 0777, true);
    }
    //echo $imageFilePath . $subDir;
    //exit;

    $excelReader = new \PHPExcel_Reader_Excel2007();
    $objPHPExcel = \PHPExcel_IOFactory::load($file);

    $sheet = $objPHPExcel->getSheet(0);                                                                                                             // 첫번째 시트
    $highestRowNum = $sheet->getHighestRow();                                                                                                       // 마지막 라인
    $highestColumn = $sheet->getHighestColumn();                                                                                                    // 마지막 칼럼
    $highestColumnNum = \PHPExcel_Cell::columnIndexFromString($highestColumn);

    // 1번행 manufacturing, Model... 등등
    //$ColumnNum = "manufacturing,Model,number,manufacture,transmission,fuel,color,Accident,AS,distance,sales,Sale Price,sale,N,Convenience,performance/appearance,description,image1,image2";
    //$highestColumnNum = explode(",", $ColumnNum);
    $titlefiled = array();
    for ($i = 0; $i < $highestColumnNum; $i++) {
        $cellName = \PHPExcel_Cell::stringFromColumnIndex($i) . '1';
        $cellVal = $sheet->getCell($cellName)->getValue();                                                                                          // 내용
        $titlefiled[] = $cellVal;
    }

    //print_r($titlefiled);
    //exit;

    // 2번행 이상 배열 시작
    $data = array();
    for ($i = 2; $i <= $highestRowNum; $i++) {//ignore row 1
        $row = array();
        for ($j = 0; $j < $highestColumnNum; $j++) {
            $cellName = \PHPExcel_Cell::stringFromColumnIndex($j) . $i;
            $cellVal = $sheet->getCell($cellName)->getValue();
            $row[$titlefiled[$j]] = $cellVal;
        }
        $data[] = $row;
    }
    //print_r($data);
    //exit;

    // 이미지
    $is=0;
    foreach ($sheet->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 {
            $drawing->setWidth(800);  // 이미지 크기
            $drawing->setOffsetX(35);  // 이미지가 시작할 위치를 퍼센트로 적용 셀의 크기에 가로가 35%만큼 이동해서 시작
            $drawing->setOffsetY(5);  // 이미지가 시작할 위치를 퍼센트로 적용 셀의 크기에 세로가 5%만큼 이동해서 시작

           // echo "<pre>";
            //print_r($drawing->getPath());
            //exit;

            $zipReader = fopen($drawing->getPath(),'r');
            $imageContents = '';
            while (!feof($zipReader)) {
                $imageContents .= fread($zipReader,102400);
            }
            fclose($zipReader);
            $extension = $drawing->getExtension();
            $base64 = base64_encode($imageContents);
            $imgSrc = 'data:image/' . $extension . ';base64,' . $base64;
            $image_s = "<img src='" . $imgSrc ."'>";
            //$data[$is][image1] = $image_s;
            $data[$is][image1] = $image_s;
            //print_r($image_s);
        }

        //print_r($extension);
        //print_r($imageFilePath);

        list($startColumn, $startRow) = \PHPExcel_Cell::coordinateFromString($drawing->getCoordinates());    //获取列与行号
        $startColumnindex = \PHPExcel_Cell::columnIndexFromString($startColumn) - 1;
        $name = $subDir . substr(time(), 5) . mt_rand(0, 9999) . '.' . $extension;
        //$data[$startRow - 2][$titlefiled[$startColumnindex]] = $name;
        $data[$is][images] = file_put_contents($imageFilePath . $name, $imageContents);
        $data[$is][image] = $imageFilePath.$name;
        //$data[$is][image_s] = $image_s;
        //print_r($is);
        $is++;
    }
    echo "<pre>";
    print_r($data);

이 질문에 댓글 쓰기 :

답변 2

답변을 작성하시기 전에 로그인 해주세요.
전체 123,633 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT