如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2020年6月29日

PHPExcel如何在工作表內放入ㄧ個圖片(背景是透明的PNG檔)

作者: Fred F.M. Wang (FW知識瑣記) 日期:2020/6/29

前ㄧ篇文 "PHPExcel 無法儲存寫入內含圖片的Excel檔,問題如何解決?",解決在儲存有Logo圖片的工作表問題後,另一種情況就是除了Logo外,還要加入一張圖片,而且圖片為背景是透明的PNG檔。嘗試後,分享程式如下 :

private function addSignImage($objPHPExcelOut,$column,$row) {
    $signimgfile = dirname($_SERVER["SCRIPT_FILENAME"]) . "/資料夾名稱/檔名.png";           
    $gdImage = imagecreatefrompng($signimgfile);   
   
     // 保持PNG圖片背景透明
    imagealphablending($gdImage, false);  // 關閉alpha渲染
    imagesavealpha($gdImage, true); // 設置alpha標誌以在儲存PNG圖像時保存完整的alpha通道資訊
   
    $objDrawing = new PHPExcel_Worksheet_MemoryDrawing();               
    $objDrawing->setName("signimage");
    $objDrawing->setDescription("signimage");
    $objDrawing->setImageResource($gdImage);
    $objDrawing->setRenderingFunction(PHPExcel_Worksheet_MemoryDrawing::RENDERING_PNG); 
    $objDrawing->setMimeType(PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_DEFAULT);
    $objDrawing->setCoordinates($column.$row);    // 圖片左上角放置在哪個儲存格的位置
    $objDrawing->setHeight(390);   // 設定圖片高度(寬度會等比例變寬)
    $objDrawing->setOffsetX(288);  // 向左位移幾個像素
    $objDrawing->setOffsetY(14);   // 向下位移幾個像素
    $objDrawing->setWorksheet($objPHPExcelOut->getActiveSheet());       
}

主程式
$objPHPExcelOut = PHPExcel_IOFactory::load($outfilepath);
$objPHPExcelOut->setActiveSheetIndex(0);    // 預設0是指第一個工作表
.....
$col = "D";
$row = 27;
$this->addSignImage($objPHPExcelOut,$col,$row);