summaryrefslogtreecommitdiff
path: root/src/images.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/images.php')
-rw-r--r--src/images.php48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/images.php b/src/images.php
new file mode 100644
index 0000000..0e09814
--- /dev/null
+++ b/src/images.php
@@ -0,0 +1,48 @@
+<?php
+function resize_image(string $src_path, string $dst_path, int $max_width, int $max_height): string|null
+{
+ if ($src_path == "" || !getimagesize($src_path)) {
+ return json_encode([
+ "status_code" => 400,
+ "message" => "Not an image",
+ "data" => null
+ ]);
+ }
+
+ $imagick = new Imagick();
+
+ $imagick->readImage($src_path);
+ $format = strtolower($imagick->getImageFormat());
+
+ if ($imagick->getNumberImages() > 1) {
+ $imagick = $imagick->coalesceImages();
+
+ foreach ($imagick as $frame) {
+ $width = $frame->getImageWidth();
+ $height = $frame->getImageHeight();
+ $ratio = min($max_width / $width, $max_height / $height);
+ $new_width = (int) ($width * $ratio);
+ $new_height = (int) ($height * $ratio);
+
+ $frame->resizeImage($new_width, $new_height, Imagick::FILTER_TRIANGLE, 1);
+ $frame->setImagePage($new_width, $new_height, 0, 0);
+ }
+
+ $imagick = $imagick->deconstructImages();
+ $imagick->writeImages("$dst_path.$format", true);
+ } else {
+ $width = $imagick->getImageWidth();
+ $height = $imagick->getImageHeight();
+ $ratio = min($max_width / $width, $max_height / $height);
+ $new_width = (int) ($width * $ratio);
+ $new_height = (int) ($height * $ratio);
+
+ $imagick->resizeImage($new_width, $new_height, Imagick::FILTER_TRIANGLE, 1);
+ $imagick->writeImage("$dst_path.$format");
+ }
+
+ $imagick->clear();
+ $imagick->destroy();
+
+ return null;
+} \ No newline at end of file