diff --git a/lib/private/Avatar/UserAvatar.php b/lib/private/Avatar/UserAvatar.php index f47809425ed40..8573adf5d87c0 100644 --- a/lib/private/Avatar/UserAvatar.php +++ b/lib/private/Avatar/UserAvatar.php @@ -122,7 +122,7 @@ public function set($data) { /** * Returns an image from several sources. * - * @param IImage|resource|string $data An image object, imagedata or path to the avatar + * @param IImage|resource|string|\GdImage $data An image object, imagedata or path to the avatar * @return IImage */ private function getAvatarImage($data) { @@ -131,7 +131,10 @@ private function getAvatarImage($data) { } $img = new OC_Image(); - if (is_resource($data) && get_resource_type($data) === 'gd') { + if ( + (is_resource($data) && get_resource_type($data) === 'gd') || + (is_object($data) && get_class($data) === \GdImage::class) + ) { $img->setResource($data); } elseif (is_resource($data)) { $img->loadFromFileHandle($data); diff --git a/lib/private/Preview/Bitmap.php b/lib/private/Preview/Bitmap.php index 7322e07ab3454..b573808447646 100644 --- a/lib/private/Preview/Bitmap.php +++ b/lib/private/Preview/Bitmap.php @@ -61,7 +61,7 @@ public function getThumbnail(File $file, int $maxX, int $maxY): ?IImage { //new bitmap image object $image = new \OC_Image(); - $image->loadFromData($bp); + $image->loadFromData((string) $bp); //check if image object is valid return $image->valid() ? $image : null; } diff --git a/lib/private/Preview/HEIC.php b/lib/private/Preview/HEIC.php index f9f85090a8008..43d1cf65ada6e 100644 --- a/lib/private/Preview/HEIC.php +++ b/lib/private/Preview/HEIC.php @@ -77,7 +77,7 @@ public function getThumbnail(File $file, int $maxX, int $maxY): ?IImage { //new bitmap image object $image = new \OC_Image(); - $image->loadFromData($bp); + $image->loadFromData((string) $bp); //check if image object is valid return $image->valid() ? $image : null; } diff --git a/lib/private/Preview/SVG.php b/lib/private/Preview/SVG.php index 6630dc2697876..790dad5c26cd2 100644 --- a/lib/private/Preview/SVG.php +++ b/lib/private/Preview/SVG.php @@ -70,7 +70,7 @@ public function getThumbnail(File $file, int $maxX, int $maxY): ?IImage { //new image object $image = new \OC_Image(); - $image->loadFromData($svg); + $image->loadFromData((string) $svg); //check if image object is valid if ($image->valid()) { $image->scaleDownToFit($maxX, $maxY); diff --git a/lib/private/legacy/OC_Image.php b/lib/private/legacy/OC_Image.php index ed173849c769c..f93bcfaaaf481 100644 --- a/lib/private/legacy/OC_Image.php +++ b/lib/private/legacy/OC_Image.php @@ -102,7 +102,7 @@ public function valid() { // apparently you can't name a method 'empty'... if (is_resource($this->resource)) { return true; } - if (is_object($this->resource) && get_class($this->resource) === 'GdImage') { + if (is_object($this->resource) && get_class($this->resource) === \GdImage::class) { return true; } @@ -309,7 +309,7 @@ public function __invoke() { } /** - * @param resource Returns the image resource in any. + * @param resource|\GdImage $resource * @throws \InvalidArgumentException in case the supplied resource does not have the type "gd" */ public function setResource($resource) { @@ -319,7 +319,7 @@ public function setResource($resource) { return; } // PHP 8 has real objects for GD stuff - if (is_object($resource) && get_class($resource) === 'GdImage') { + if (is_object($resource) && get_class($resource) === \GdImage::class) { $this->resource = $resource; return; } @@ -327,7 +327,7 @@ public function setResource($resource) { } /** - * @return resource Returns the image resource in any. + * @return resource|\GdImage Returns the image resource in any. */ public function resource() { return $this->resource; @@ -537,7 +537,7 @@ public function fixOrientation() { * It is the responsibility of the caller to position the pointer at the correct place and to close the handle again. * * @param resource $handle - * @return resource|false An image resource or false on error + * @return resource|\GdImage|false An image resource or false on error */ public function loadFromFileHandle($handle) { $contents = stream_get_contents($handle); @@ -551,7 +551,7 @@ public function loadFromFileHandle($handle) { * Loads an image from a local file. * * @param bool|string $imagePath The path to a local file. - * @return bool|resource An image resource or false on error + * @return bool|resource|\GdImage An image resource or false on error */ public function loadFromFile($imagePath = false) { // exif_imagetype throws "read error!" if file is less than 12 byte @@ -667,17 +667,17 @@ public function loadFromFile($imagePath = false) { * Loads an image from a string of data. * * @param string $str A string of image data as read from a file. - * @return bool|resource An image resource or false on error + * @return bool|resource|\GdImage An image resource or false on error */ public function loadFromData($str) { - if (is_resource($str)) { + if (!is_string($str)) { return false; } $this->resource = @imagecreatefromstring($str); if ($this->fileInfo) { $this->mimeType = $this->fileInfo->buffer($str); } - if (is_resource($this->resource)) { + if ($this->valid()) { imagealphablending($this->resource, false); imagesavealpha($this->resource, true); } @@ -693,7 +693,7 @@ public function loadFromData($str) { * Loads an image from a base64 encoded string. * * @param string $str A string base64 encoded string of image data. - * @return bool|resource An image resource or false on error + * @return bool|resource|\GdImage An image resource or false on error */ public function loadFromBase64($str) { if (!is_string($str)) { @@ -723,7 +723,7 @@ public function loadFromBase64($str) { * @param string $fileName
* Path to the BMP image. *
- * @return bool|resource an image resource identifier on success, FALSE on errors. + * @return bool|resource|\GdImage an image resource identifier on success, FALSE on errors. */ private function imagecreatefrombmp($fileName) { if (!($fh = fopen($fileName, 'rb'))) { @@ -879,12 +879,12 @@ public function resize($maxSize) { $result = $this->resizeNew($maxSize); imagedestroy($this->resource); $this->resource = $result; - return is_resource($result); + return $this->valid(); } /** * @param $maxSize - * @return resource | bool + * @return resource|bool|\GdImage */ private function resizeNew($maxSize) { if (!$this->valid()) { @@ -915,14 +915,14 @@ public function preciseResize(int $width, int $height): bool { $result = $this->preciseResizeNew($width, $height); imagedestroy($this->resource); $this->resource = $result; - return is_resource($result); + return $this->valid(); } /** * @param int $width * @param int $height - * @return resource | bool + * @return resource|bool|\GdImage */ public function preciseResizeNew(int $width, int $height) { if (!$this->valid()) { @@ -1024,7 +1024,7 @@ public function crop(int $x, int $y, int $w, int $h): bool { $result = $this->cropNew($x, $y, $w, $h); imagedestroy($this->resource); $this->resource = $result; - return is_resource($result); + return $this->valid(); } /** @@ -1192,7 +1192,7 @@ public function __destruct() { * @link http://www.programmierer-forum.de/imagebmp-gute-funktion-gefunden-t143716.htm * @author mguttThe path to save the file to.
* @param int $bit [optional]Bit depth, (default is 24).
* @param int $compression [optional] diff --git a/lib/public/IImage.php b/lib/public/IImage.php index aa1cf344e5fc2..ea9f6e40190c0 100644 --- a/lib/public/IImage.php +++ b/lib/public/IImage.php @@ -99,7 +99,7 @@ public function show($mimeType = null); public function save($filePath = null, $mimeType = null); /** - * @return resource Returns the image resource in any. + * @return resource|\GdImage Returns the image resource in any. * @since 8.1.0 */ public function resource(); diff --git a/psalm-ocp.xml b/psalm-ocp.xml index 5574ae0fb5dc1..4519b7e9ca46a 100644 --- a/psalm-ocp.xml +++ b/psalm-ocp.xml @@ -16,4 +16,12 @@