2012-06-06 3 views
3

PHPExcel을 사용하여 Excel 파일에서 이미지를 읽고 서버에 이미지를 저장하고 표시하려면 어떻게해야합니까? 파일의 확장자는 .xlsx입니다.PHP를 사용하여 Excel 파일 (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(); 
    } 

} 

감사합니다!

+0

지금까지 해보신 것은 무엇입니까? 질문을 편집하여 코드를 볼 수 있습니다. –

+0

코드를 복사했습니다 ... 아래에서 확인할 수 있습니다. – rSara

+0

질문을 편집하고 코드를 추가해야합니다. 방금 해 주셨습니다. 코드를 표시하기 위해 게시 한 답변을 삭제하십시오. –

답변

5
$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 메소드를 사용하여 이러한 객체에서 이미지 파일을 추출 할 수 있습니다.

편집

시간을 Spoonfeeding.

그러면 현재 활성 워크 시트의 모든 이미지가 추출되어 서버의 파일에 기록됩니다.

$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); 
} 

파일은 n은 1부터 시작되는 번호이다

00_Image_n.extension 

이름 및 확장은 콘텐츠 타입에 대한 적절한 확장 (PNG, JPG, GIF, 어떤)이다된다.

+0

나는 이미이 답변을 읽었지만 그것을 이해하지 못했습니다 ... 이것은 내 코드이지만 xls 외양에 대해서는 계속 진행되지 않습니다. $ objPHPExcel = PHPExcel_IOFactory :: load $ 경로); foreach ($ objPHPExcel-> getActiveSheet() -> $ 드로잉으로 getDrawingCollection()) { if ($ drawing instanceof PHPExcel_Worksheet_MemoryDrawing) { ob_start(); call_user_func ( $ drawing-> getRenderingFunction(), $ drawing-> getImageResource() ); $ imageContents = ob_get_contents(); ob_end_clean(); } } – rSara

+0

당신은 그것에 대해 어떻게 이해하지 못합니까? 이것을 호출하면 일련의 이미지 객체를 얻을 수 있습니다.이미지 객체의 유형에 따라 getImageResource()를 사용하여 원시 이미지 데이터 또는 getIndexedFilename()의 bytestream을 검색하고 반환 된 파일을 읽어 이미지 –

+0

을 가져옵니다. 그러나 xlsx exstantion에는 해당되지 않습니다. – rSara

관련 문제