aboutsummaryrefslogtreecommitdiffstats
path: root/public/system/library/image.php
diff options
context:
space:
mode:
Diffstat (limited to 'public/system/library/image.php')
-rw-r--r--public/system/library/image.php339
1 files changed, 339 insertions, 0 deletions
diff --git a/public/system/library/image.php b/public/system/library/image.php
new file mode 100644
index 0000000..b1d7e9f
--- /dev/null
+++ b/public/system/library/image.php
@@ -0,0 +1,339 @@
+<?php
+/**
+ * @package OpenCart
+ * @author Daniel Kerr
+ * @copyright Copyright (c) 2005 - 2017, OpenCart, Ltd. (https://www.opencart.com/)
+ * @license https://opensource.org/licenses/GPL-3.0
+ * @link https://www.opencart.com
+*/
+
+/**
+* Image class
+*/
+class Image {
+ private $file;
+ private $image;
+ private $width;
+ private $height;
+ private $bits;
+ private $mime;
+
+ /**
+ * Constructor
+ *
+ * @param string $file
+ *
+ */
+ public function __construct($file) {
+ if (!extension_loaded('gd')) {
+ exit('Error: PHP GD is not installed!');
+ }
+
+ if (file_exists($file)) {
+ $this->file = $file;
+
+ $info = getimagesize($file);
+
+ $this->width = $info[0];
+ $this->height = $info[1];
+ $this->bits = isset($info['bits']) ? $info['bits'] : '';
+ $this->mime = isset($info['mime']) ? $info['mime'] : '';
+
+ if ($this->mime == 'image/gif') {
+ $this->image = imagecreatefromgif($file);
+ } elseif ($this->mime == 'image/png') {
+ $this->image = imagecreatefrompng($file);
+ } elseif ($this->mime == 'image/jpeg') {
+ $this->image = imagecreatefromjpeg($file);
+ }
+ } else {
+ exit('Error: Could not load image ' . $file . '!');
+ }
+ }
+
+ /**
+ *
+ *
+ * @return string
+ */
+ public function getFile() {
+ return $this->file;
+ }
+
+ /**
+ *
+ *
+ * @return array
+ */
+ public function getImage() {
+ return $this->image;
+ }
+
+ /**
+ *
+ *
+ * @return string
+ */
+ public function getWidth() {
+ return $this->width;
+ }
+
+ /**
+ *
+ *
+ * @return string
+ */
+ public function getHeight() {
+ return $this->height;
+ }
+
+ /**
+ *
+ *
+ * @return string
+ */
+ public function getBits() {
+ return $this->bits;
+ }
+
+ /**
+ *
+ *
+ * @return string
+ */
+ public function getMime() {
+ return $this->mime;
+ }
+
+ /**
+ *
+ *
+ * @param string $file
+ * @param int $quality
+ */
+ public function save($file, $quality = 90) {
+ $info = pathinfo($file);
+
+ $extension = strtolower($info['extension']);
+
+ if (is_resource($this->image)) {
+ if ($extension == 'jpeg' || $extension == 'jpg') {
+ imagejpeg($this->image, $file, $quality);
+ } elseif ($extension == 'png') {
+ imagepng($this->image, $file);
+ } elseif ($extension == 'gif') {
+ imagegif($this->image, $file);
+ }
+
+ imagedestroy($this->image);
+ }
+ }
+
+ /**
+ *
+ *
+ * @param int $width
+ * @param int $height
+ * @param string $default
+ */
+ public function resize($width = 0, $height = 0, $default = '') {
+ if (!$this->width || !$this->height) {
+ return;
+ }
+
+ $xpos = 0;
+ $ypos = 0;
+ $scale = 1;
+
+ $scale_w = $width / $this->width;
+ $scale_h = $height / $this->height;
+
+ if ($default == 'w') {
+ $scale = $scale_w;
+ } elseif ($default == 'h') {
+ $scale = $scale_h;
+ } else {
+ $scale = min($scale_w, $scale_h);
+ }
+
+ if ($scale == 1 && $scale_h == $scale_w && $this->mime != 'image/png') {
+ return;
+ }
+
+ $new_width = (int)($this->width * $scale);
+ $new_height = (int)($this->height * $scale);
+ $xpos = (int)(($width - $new_width) / 2);
+ $ypos = (int)(($height - $new_height) / 2);
+
+ $image_old = $this->image;
+ $this->image = imagecreatetruecolor($width, $height);
+
+ if ($this->mime == 'image/png') {
+ imagealphablending($this->image, false);
+ imagesavealpha($this->image, true);
+ $background = imagecolorallocatealpha($this->image, 255, 255, 255, 127);
+ imagecolortransparent($this->image, $background);
+ } else {
+ $background = imagecolorallocate($this->image, 255, 255, 255);
+ }
+
+ imagefilledrectangle($this->image, 0, 0, $width, $height, $background);
+
+ imagecopyresampled($this->image, $image_old, $xpos, $ypos, 0, 0, $new_width, $new_height, $this->width, $this->height);
+ imagedestroy($image_old);
+
+ $this->width = $width;
+ $this->height = $height;
+ }
+
+ /**
+ *
+ *
+ * @param string $watermark
+ * @param string $position
+ */
+ public function watermark($watermark, $position = 'bottomright') {
+ switch($position) {
+ case 'topleft':
+ $watermark_pos_x = 0;
+ $watermark_pos_y = 0;
+ break;
+ case 'topcenter':
+ $watermark_pos_x = intval(($this->width - $watermark->getWidth()) / 2);
+ $watermark_pos_y = 0;
+ break;
+ case 'topright':
+ $watermark_pos_x = $this->width - $watermark->getWidth();
+ $watermark_pos_y = 0;
+ break;
+ case 'middleleft':
+ $watermark_pos_x = 0;
+ $watermark_pos_y = intval(($this->height - $watermark->getHeight()) / 2);
+ break;
+ case 'middlecenter':
+ $watermark_pos_x = intval(($this->width - $watermark->getWidth()) / 2);
+ $watermark_pos_y = intval(($this->height - $watermark->getHeight()) / 2);
+ break;
+ case 'middleright':
+ $watermark_pos_x = $this->width - $watermark->getWidth();
+ $watermark_pos_y = intval(($this->height - $watermark->getHeight()) / 2);
+ break;
+ case 'bottomleft':
+ $watermark_pos_x = 0;
+ $watermark_pos_y = $this->height - $watermark->getHeight();
+ break;
+ case 'bottomcenter':
+ $watermark_pos_x = intval(($this->width - $watermark->getWidth()) / 2);
+ $watermark_pos_y = $this->height - $watermark->getHeight();
+ break;
+ case 'bottomright':
+ $watermark_pos_x = $this->width - $watermark->getWidth();
+ $watermark_pos_y = $this->height - $watermark->getHeight();
+ break;
+ }
+
+ imagealphablending( $this->image, true );
+ imagesavealpha( $this->image, true );
+ imagecopy($this->image, $watermark->getImage(), $watermark_pos_x, $watermark_pos_y, 0, 0, $watermark->getWidth(), $watermark->getHeight());
+
+ imagedestroy($watermark->getImage());
+ }
+
+ /**
+ *
+ *
+ * @param int $top_x
+ * @param int $top_y
+ * @param int $bottom_x
+ * @param int $bottom_y
+ */
+ public function crop($top_x, $top_y, $bottom_x, $bottom_y) {
+ $image_old = $this->image;
+ $this->image = imagecreatetruecolor($bottom_x - $top_x, $bottom_y - $top_y);
+
+ imagecopy($this->image, $image_old, 0, 0, $top_x, $top_y, $this->width, $this->height);
+ imagedestroy($image_old);
+
+ $this->width = $bottom_x - $top_x;
+ $this->height = $bottom_y - $top_y;
+ }
+
+ /**
+ *
+ *
+ * @param int $degree
+ * @param string $color
+ */
+ public function rotate($degree, $color = 'FFFFFF') {
+ $rgb = $this->html2rgb($color);
+
+ $this->image = imagerotate($this->image, $degree, imagecolorallocate($this->image, $rgb[0], $rgb[1], $rgb[2]));
+
+ $this->width = imagesx($this->image);
+ $this->height = imagesy($this->image);
+ }
+
+ /**
+ *
+ *
+ */
+ private function filter() {
+ $args = func_get_args();
+
+ call_user_func_array('imagefilter', $args);
+ }
+
+ /**
+ *
+ *
+ * @param string $text
+ * @param int $x
+ * @param int $y
+ * @param int $size
+ * @param string $color
+ */
+ private function text($text, $x = 0, $y = 0, $size = 5, $color = '000000') {
+ $rgb = $this->html2rgb($color);
+
+ imagestring($this->image, $size, $x, $y, $text, imagecolorallocate($this->image, $rgb[0], $rgb[1], $rgb[2]));
+ }
+
+ /**
+ *
+ *
+ * @param object $merge
+ * @param object $x
+ * @param object $y
+ * @param object $opacity
+ */
+ private function merge($merge, $x = 0, $y = 0, $opacity = 100) {
+ imagecopymerge($this->image, $merge->getImage(), $x, $y, 0, 0, $merge->getWidth(), $merge->getHeight(), $opacity);
+ }
+
+ /**
+ *
+ *
+ * @param string $color
+ *
+ * @return array
+ */
+ private function html2rgb($color) {
+ if ($color[0] == '#') {
+ $color = substr($color, 1);
+ }
+
+ if (strlen($color) == 6) {
+ list($r, $g, $b) = array($color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5]);
+ } elseif (strlen($color) == 3) {
+ list($r, $g, $b) = array($color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2]);
+ } else {
+ return false;
+ }
+
+ $r = hexdec($r);
+ $g = hexdec($g);
+ $b = hexdec($b);
+
+ return array($r, $g, $b);
+ }
+} \ No newline at end of file