diff options
author | Roeland Jago Douma <rullzer@users.noreply.github.com> | 2020-04-10 15:57:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-10 15:57:06 +0200 |
commit | eba3726e1e1b7ce0a98df4552cfdecfe05e0d63a (patch) | |
tree | 7d50a939305460fbb34078c1da49f992552747e7 /lib/private/legacy/OC_Image.php | |
parent | edf8ce32cffdb920e8171207b342abbd7f1fbe73 (diff) | |
parent | 8f9bac26f874e105c017de2b1791b23c2a135b28 (diff) | |
download | nextcloud-server-eba3726e1e1b7ce0a98df4552cfdecfe05e0d63a.tar.gz nextcloud-server-eba3726e1e1b7ce0a98df4552cfdecfe05e0d63a.zip |
Merge pull request #19495 from nextcloud/preview-generate-batch
optimize batch generation of previews
Diffstat (limited to 'lib/private/legacy/OC_Image.php')
-rw-r--r-- | lib/private/legacy/OC_Image.php | 102 |
1 files changed, 94 insertions, 8 deletions
diff --git a/lib/private/legacy/OC_Image.php b/lib/private/legacy/OC_Image.php index 829a9b81652..c8a2f6f458c 100644 --- a/lib/private/legacy/OC_Image.php +++ b/lib/private/legacy/OC_Image.php @@ -39,6 +39,8 @@ * */ +use OCP\IImage; + /** * Class for basic image manipulation */ @@ -845,6 +847,17 @@ class OC_Image implements \OCP\IImage { * @return bool */ public function resize($maxSize) { + $result = $this->resizeNew($maxSize); + imagedestroy($this->resource); + $this->resource = $result; + return is_resource($result); + } + + /** + * @param $maxSize + * @return resource | bool + */ + private function resizeNew($maxSize) { if (!$this->valid()) { $this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']); return false; @@ -861,8 +874,7 @@ class OC_Image implements \OCP\IImage { $newHeight = $maxSize; } - $this->preciseResize((int)round($newWidth), (int)round($newHeight)); - return true; + return $this->preciseResizeNew((int)round($newWidth), (int)round($newHeight)); } /** @@ -871,6 +883,19 @@ class OC_Image implements \OCP\IImage { * @return bool */ public function preciseResize(int $width, int $height): bool { + $result = $this->preciseResizeNew($width, $height); + imagedestroy($this->resource); + $this->resource = $result; + return is_resource($result); + } + + + /** + * @param int $width + * @param int $height + * @return resource | bool + */ + public function preciseResizeNew(int $width, int $height) { if (!$this->valid()) { $this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']); return false; @@ -896,9 +921,7 @@ class OC_Image implements \OCP\IImage { imagedestroy($process); return false; } - imagedestroy($this->resource); - $this->resource = $process; - return true; + return $process; } /** @@ -969,6 +992,22 @@ class OC_Image implements \OCP\IImage { * @return bool for success or failure */ 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); + } + + /** + * Crops the image from point $x$y with dimension $wx$h. + * + * @param int $x Horizontal position + * @param int $y Vertical position + * @param int $w Width + * @param int $h Height + * @return resource | bool + */ + public function cropNew(int $x, int $y, int $w, int $h) { if (!$this->valid()) { $this->logger->error(__METHOD__ . '(): No image loaded', ['app' => 'core']); return false; @@ -993,9 +1032,7 @@ class OC_Image implements \OCP\IImage { imagedestroy($process); return false; } - imagedestroy($this->resource); - $this->resource = $process; - return true; + return $process; } /** @@ -1045,6 +1082,55 @@ class OC_Image implements \OCP\IImage { return false; } + public function copy(): IImage { + $image = new OC_Image(null, $this->logger, $this->config); + $image->resource = imagecreatetruecolor($this->width(), $this->height()); + imagecopy( + $image->resource(), + $this->resource(), + 0, + 0, + 0, + 0, + $this->width(), + $this->height() + ); + + return $image; + } + + public function cropCopy(int $x, int $y, int $w, int $h): IImage { + $image = new OC_Image(null, $this->logger, $this->config); + $image->resource = $this->cropNew($x, $y, $w, $h); + + return $image; + } + + public function preciseResizeCopy(int $width, int $height): IImage { + $image = new OC_Image(null, $this->logger, $this->config); + $image->resource = $this->preciseResizeNew($width, $height); + + return $image; + } + + public function resizeCopy(int $maxSize): IImage { + $image = new OC_Image(null, $this->logger, $this->config); + $image->resource = $this->resizeNew($maxSize); + + return $image; + } + + + /** + * Resizes the image preserving ratio, returning a new copy + * + * @param integer $maxSize The maximum size of either the width or height. + * @return bool + */ + public function copyResize($maxSize): IImage { + + } + /** * Destroys the current image and resets the object */ |