This should fix png files with transparency in the Xls reader (#2155)

* This should fix png files with transparency in the Xls reader
This commit is contained in:
Mark Baker 2021-06-11 22:00:26 +02:00 committed by GitHub
parent 05466e99ce
commit 9c2ce22505
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 29 deletions

View File

@ -2775,11 +2775,6 @@ parameters:
count: 1 count: 1
path: src/PhpSpreadsheet/Reader/Xls.php path: src/PhpSpreadsheet/Reader/Xls.php
-
message: "#^Parameter \\#1 \\$value of method PhpOffice\\\\PhpSpreadsheet\\\\Worksheet\\\\MemoryDrawing\\:\\:setImageResource\\(\\) expects GdImage\\|resource, resource\\|false given\\.$#"
count: 1
path: src/PhpSpreadsheet/Reader/Xls.php
- -
message: "#^Parameter \\#1 \\$pValue of method PhpOffice\\\\PhpSpreadsheet\\\\Worksheet\\\\BaseDrawing\\:\\:setOffsetX\\(\\) expects int, float\\|int given\\.$#" message: "#^Parameter \\#1 \\$pValue of method PhpOffice\\\\PhpSpreadsheet\\\\Worksheet\\\\BaseDrawing\\:\\:setOffsetX\\(\\) expects int, float\\|int given\\.$#"
count: 1 count: 1

View File

@ -17,6 +17,7 @@ use PhpOffice\PhpSpreadsheet\Shared\File;
use PhpOffice\PhpSpreadsheet\Shared\OLE; use PhpOffice\PhpSpreadsheet\Shared\OLE;
use PhpOffice\PhpSpreadsheet\Shared\OLERead; use PhpOffice\PhpSpreadsheet\Shared\OLERead;
use PhpOffice\PhpSpreadsheet\Shared\StringHelper; use PhpOffice\PhpSpreadsheet\Shared\StringHelper;
use PhpOffice\PhpSpreadsheet\Shared\Xls as SharedXls;
use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Style\Alignment; use PhpOffice\PhpSpreadsheet\Style\Alignment;
use PhpOffice\PhpSpreadsheet\Style\Borders; use PhpOffice\PhpSpreadsheet\Style\Borders;
@ -1102,12 +1103,12 @@ class Xls extends BaseReader
$endOffsetX = $spContainer->getEndOffsetX(); $endOffsetX = $spContainer->getEndOffsetX();
$endOffsetY = $spContainer->getEndOffsetY(); $endOffsetY = $spContainer->getEndOffsetY();
$width = \PhpOffice\PhpSpreadsheet\Shared\Xls::getDistanceX($this->phpSheet, $startColumn, $startOffsetX, $endColumn, $endOffsetX); $width = SharedXls::getDistanceX($this->phpSheet, $startColumn, $startOffsetX, $endColumn, $endOffsetX);
$height = \PhpOffice\PhpSpreadsheet\Shared\Xls::getDistanceY($this->phpSheet, $startRow, $startOffsetY, $endRow, $endOffsetY); $height = SharedXls::getDistanceY($this->phpSheet, $startRow, $startOffsetY, $endRow, $endOffsetY);
// calculate offsetX and offsetY of the shape // calculate offsetX and offsetY of the shape
$offsetX = $startOffsetX * \PhpOffice\PhpSpreadsheet\Shared\Xls::sizeCol($this->phpSheet, $startColumn) / 1024; $offsetX = $startOffsetX * SharedXls::sizeCol($this->phpSheet, $startColumn) / 1024;
$offsetY = $startOffsetY * \PhpOffice\PhpSpreadsheet\Shared\Xls::sizeRow($this->phpSheet, $startRow) / 256; $offsetY = $startOffsetY * SharedXls::sizeRow($this->phpSheet, $startRow) / 256;
switch ($obj['otObjType']) { switch ($obj['otObjType']) {
case 0x19: case 0x19:
@ -1143,31 +1144,35 @@ class Xls extends BaseReader
// need check because some blip types are not supported by Escher reader such as EMF // need check because some blip types are not supported by Escher reader such as EMF
if ($blip = $BSE->getBlip()) { if ($blip = $BSE->getBlip()) {
$ih = imagecreatefromstring($blip->getData()); $ih = imagecreatefromstring($blip->getData());
$drawing = new MemoryDrawing(); if ($ih !== false) {
$drawing->setImageResource($ih); $drawing = new MemoryDrawing();
$drawing->setImageResource($ih);
// width, height, offsetX, offsetY // width, height, offsetX, offsetY
$drawing->setResizeProportional(false); $drawing->setResizeProportional(false);
$drawing->setWidth($width); $drawing->setWidth($width);
$drawing->setHeight($height); $drawing->setHeight($height);
$drawing->setOffsetX($offsetX); $drawing->setOffsetX($offsetX);
$drawing->setOffsetY($offsetY); $drawing->setOffsetY($offsetY);
switch ($blipType) { switch ($blipType) {
case BSE::BLIPTYPE_JPEG: case BSE::BLIPTYPE_JPEG:
$drawing->setRenderingFunction(MemoryDrawing::RENDERING_JPEG); $drawing->setRenderingFunction(MemoryDrawing::RENDERING_JPEG);
$drawing->setMimeType(MemoryDrawing::MIMETYPE_JPEG); $drawing->setMimeType(MemoryDrawing::MIMETYPE_JPEG);
break; break;
case BSE::BLIPTYPE_PNG: case BSE::BLIPTYPE_PNG:
$drawing->setRenderingFunction(MemoryDrawing::RENDERING_PNG); imagealphablending($ih, false);
$drawing->setMimeType(MemoryDrawing::MIMETYPE_PNG); imagesavealpha($ih, true);
$drawing->setRenderingFunction(MemoryDrawing::RENDERING_PNG);
$drawing->setMimeType(MemoryDrawing::MIMETYPE_PNG);
break; break;
}
$drawing->setWorksheet($this->phpSheet);
$drawing->setCoordinates($spContainer->getStartCoordinates());
} }
$drawing->setWorksheet($this->phpSheet);
$drawing->setCoordinates($spContainer->getStartCoordinates());
} }
} }