aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/legacy/OC_Image.php
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@users.noreply.github.com>2020-04-10 15:57:06 +0200
committerGitHub <noreply@github.com>2020-04-10 15:57:06 +0200
commiteba3726e1e1b7ce0a98df4552cfdecfe05e0d63a (patch)
tree7d50a939305460fbb34078c1da49f992552747e7 /lib/private/legacy/OC_Image.php
parentedf8ce32cffdb920e8171207b342abbd7f1fbe73 (diff)
parent8f9bac26f874e105c017de2b1791b23c2a135b28 (diff)
downloadnextcloud-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.php102
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
*/