作者: 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);