Viewing file: Drawing.php (5.42 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace PhpOffice\PhpSpreadsheet\Worksheet;
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException; use ZipArchive;
class Drawing extends BaseDrawing { const IMAGE_TYPES_CONVERTION_MAP = [ IMAGETYPE_GIF => IMAGETYPE_PNG, IMAGETYPE_JPEG => IMAGETYPE_JPEG, IMAGETYPE_PNG => IMAGETYPE_PNG, IMAGETYPE_BMP => IMAGETYPE_PNG, ];
/** * Path. * * @var string */ private $path;
/** * Whether or not we are dealing with a URL. * * @var bool */ private $isUrl;
/** * Create a new Drawing. */ public function __construct() { // Initialise values $this->path = ''; $this->isUrl = false;
// Initialize parent parent::__construct(); }
/** * Get Filename. * * @return string */ public function getFilename() { return basename($this->path); }
/** * Get indexed filename (using image index). */ public function getIndexedFilename(): string { return md5($this->path) . '.' . $this->getExtension(); }
/** * Get Extension. * * @return string */ public function getExtension() { $exploded = explode('.', basename($this->path));
return $exploded[count($exploded) - 1]; }
/** * Get full filepath to store drawing in zip archive. * * @return string */ public function getMediaFilename() { if (!array_key_exists($this->type, self::IMAGE_TYPES_CONVERTION_MAP)) { throw new PhpSpreadsheetException('Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.'); }
return sprintf('image%d%s', $this->getImageIndex(), $this->getImageFileExtensionForSave()); }
/** * Get Path. * * @return string */ public function getPath() { return $this->path; }
/** * Set Path. * * @param string $path File path * @param bool $verifyFile Verify file * @param ZipArchive $zip Zip archive instance * * @return $this */ public function setPath($path, $verifyFile = true, $zip = null) { if ($verifyFile && preg_match('~^data:image/[a-z]+;base64,~', $path) !== 1) { // Check if a URL has been passed. https://stackoverflow.com/a/2058596/1252979 if (filter_var($path, FILTER_VALIDATE_URL)) { $this->path = $path; // Implicit that it is a URL, rather store info than running check above on value in other places. $this->isUrl = true; $imageContents = file_get_contents($path); $filePath = tempnam(sys_get_temp_dir(), 'Drawing'); if ($filePath) { file_put_contents($filePath, $imageContents); if (file_exists($filePath)) { $this->setSizesAndType($filePath); unlink($filePath); } } } elseif (file_exists($path)) { $this->path = $path; $this->setSizesAndType($path); } elseif ($zip instanceof ZipArchive) { $zipPath = explode('#', $path)[1]; if ($zip->locateName($zipPath) !== false) { $this->path = $path; $this->setSizesAndType($path); } } else { throw new PhpSpreadsheetException("File $path not found!"); } } else { $this->path = $path; }
return $this; }
/** * Get isURL. */ public function getIsURL(): bool { return $this->isUrl; }
/** * Set isURL. * * @return $this */ public function setIsURL(bool $isUrl): self { $this->isUrl = $isUrl;
return $this; }
/** * Get hash code. * * @return string Hash code */ public function getHashCode() { return md5( $this->path . parent::getHashCode() . __CLASS__ ); }
/** * Get Image Type for Save. */ public function getImageTypeForSave(): int { if (!array_key_exists($this->type, self::IMAGE_TYPES_CONVERTION_MAP)) { throw new PhpSpreadsheetException('Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.'); }
return self::IMAGE_TYPES_CONVERTION_MAP[$this->type]; }
/** * Get Image file extention for Save. */ public function getImageFileExtensionForSave(bool $includeDot = true): string { if (!array_key_exists($this->type, self::IMAGE_TYPES_CONVERTION_MAP)) { throw new PhpSpreadsheetException('Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.'); }
$result = image_type_to_extension(self::IMAGE_TYPES_CONVERTION_MAP[$this->type], $includeDot);
return "$result"; }
/** * Get Image mime type. */ public function getImageMimeType(): string { if (!array_key_exists($this->type, self::IMAGE_TYPES_CONVERTION_MAP)) { throw new PhpSpreadsheetException('Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.'); }
return image_type_to_mime_type(self::IMAGE_TYPES_CONVERTION_MAP[$this->type]); } }
|