@ -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
*/