123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- <?php
- class Image {
- var $image_wrapper = null;
- function __construct($path) {
- $path = preg_match(VALID_WEB_PATH, $path) ? (api_is_internal_path($path) ? api_get_path(TO_SYS, $path) : $path) : $path;
- if (IMAGE_PROCESSOR == 'gd') {
- $this->image_wrapper = new GDWrapper($path);
- } else {
- if (class_exists('Imagick')) {
- $this->image_wrapper = new ImagickWrapper($path);
- } else {
- Display::display_warning_message('Class Imagick not found');
- exit;
- }
- }
- }
- public function resize($thumbw, $thumbh, $border = 0, $specific_size = false) {
- $this->image_wrapper->resize($thumbw, $thumbh, $border, $specific_size );
- }
- public function send_image($file = '', $compress = -1, $convert_file_to = null) {
- return $this->image_wrapper->send_image($file, $compress, $convert_file_to);
- }
- public function get_image_size() {
- return $this->image_wrapper->get_image_size();
- }
- public function get_image_info() {
- return $this->image_wrapper->get_image_info();
- }
- }
- abstract class ImageWrapper {
- var $debug = true;
- var $path;
- var $width;
- var $height;
- var $type;
- var $allowed_extensions = array('jpeg', 'jpg', 'png', 'gif');
- var $image_validated = false;
- public function __construct($path) {
- if (empty($path)) {
- return false;
- }
- $this->path = preg_match(VALID_WEB_PATH, $path) ? (api_is_internal_path($path) ? api_get_path(TO_SYS, $path) : $path) : $path;
- $this->set_image_wrapper();
- }
- abstract function set_image_wrapper();
- abstract function fill_image_info();
- abstract function get_image_size();
- abstract function resize($thumbw, $thumbh, $border, $specific_size = false);
- abstract function send_image($file = '', $compress = -1, $convert_file_to = null);
- public function get_image_info() {
- return array('width' => $this->width,
- 'height' => $this->height,
- 'type' => $this->type
- );
- }
- }
- class ImagickWrapper extends ImageWrapper {
- var $image;
- var $filter = Imagick::FILTER_LANCZOS;
- public function __construct($path) {
- parent::__construct($path);
- }
- public function set_image_wrapper() {
- if ($this->debug) error_log('Image::set_image_wrapper loaded');
- try {
- if (file_exists($this->path)) {
- $this->image = new Imagick($this->path);
- if ($this->image) {
- $this->fill_image_info();
- }
- } else {
- if ($this->debug) error_log('Image::image does not exist');
- }
- } catch(ImagickException $e) {
- if ($this->debug) error_log($e->getMessage());
- }
- }
- public function fill_image_info() {
- $image_info = $this->image->identifyImage();
- $this->width = $image_info['geometry']['width'];
- $this->height = $image_info['geometry']['height'];
- $this->type = strtolower($this->image->getImageFormat());
- if (in_array($this->type, $this->allowed_extensions)) {
- $this->image_validated = true;
- if ($this->debug) error_log('image_validated true');
- }
- }
- public function get_image_size() {
- $imagesize = array('width'=>0,'height'=>0);
- if ($this->image_validated) {
- $imagesize = $this->image->getImageGeometry();
- }
- return $imagesize;
- }
-
- public function resize($thumbw, $thumbh, $border, $specific_size = false) {
- if (!$this->image_validated) return false;
- if ($specific_size) {
- $width = $thumbw;
- $height = $thumbh;
- } else {
- $scale = ($this->width > 0 && $this->height > 0) ? min($thumbw / $this->width, $thumbh / $this->height) : 0;
- $width = (int)($this->width * $scale);
- $height = (int)($this->height * $scale);
- }
- $result = $this->image->resizeImage($width, $height, $this->filter, 1);
- $this->width = $thumbw;
- $this->height = $thumbh;
- }
- public function send_image($file = '', $compress = -1, $convert_file_to = null) {
- if (!$this->image_validated) return false;
- $type = $this->type;
- if (!empty($convert_file_to) && in_array($convert_file_to, $this->allowed_extensions)) {
- $type = $convert_file_to;
- }
- switch ($type) {
- case 'jpeg':
- case 'jpg':
- if (!$file) header("Content-type: image/jpeg");
- break;
- case 'png':
- if (!$file) header("Content-type: image/png");
- break;
- case 'gif':
- if (!$file) header("Content-type: image/gif");
- break;
- }
- $result = false;
- try {
- $result = $this->image->writeImage($file);
- } catch(ImagickException $e) {
- if ($this->debug) error_log($e->getMessage());
- }
- if (!$file) {
- echo $this->image;
- $this->image->clear();
- $this->image->destroy();
- } else {
- $this->image->clear();
- $this->image->destroy();
- return $result;
- }
- }
- }
- class GDWrapper extends ImageWrapper {
- var $bg;
- function __construct($path) {
- parent::__construct($path);
- }
- public function set_image_wrapper() {
- $handler = null;
- $this->fill_image_info();
- switch ($this->type) {
- case 0:
- $handler = false;
- break;
- case 1 :
- $handler = @imagecreatefromgif($this->path);
- $this->type = 'gif';
- break;
- case 2 :
- $handler = @imagecreatefromjpeg($this->path);
- $this->type = 'jpg';
- break;
- case 3 :
- $handler = @imagecreatefrompng($this->path);
- $this->type = 'png';
- break;
- }
- if ($handler) {
- $this->image_validated = true;
- $this->bg = $handler;
- @imagealphablending($this->bg, false);
- @imagesavealpha($this->bg, true);
- }
- }
- public function get_image_size() {
- $return_array = array('width'=>0,'height'=>0);
- if ($this->image_validated) {
- $return_array = array('width'=>$this->width,'height'=>$this->height);
- }
- return $return_array;
- }
- public function fill_image_info() {
- if (file_exists($this->path)) {
- $image_info = getimagesize($this->path);
- $this->width = $image_info[0];
- $this->height = $image_info[1];
- $this->type = $image_info[2];
- } else {
- $this->width = 0;
- $this->height = 0;
- $this->type = 0;
- }
- }
- public function resize($thumbw, $thumbh, $border, $specific_size = false) {
- if (!$this->image_validated) return false;
- if ($border == 1) {
- if ($specific_size) {
- $width = $thumbw;
- $height = $thumbh;
- } else {
- $scale = min($thumbw / $this->width, $thumbh / $this->height);
- $width = (int)($this->width * $scale);
- $height = (int)($this->height * $scale);
- }
- $deltaw = (int)(($thumbw - $width) / 2);
- $deltah = (int)(($thumbh - $height) / 2);
- $dst_img = @ImageCreateTrueColor($thumbw, $thumbh);
- @imagealphablending($dst_img, false);
- @imagesavealpha($dst_img, true);
- if (!empty($this->color)) {
- @imagefill($dst_img, 0, 0, $this->color);
- }
- $this->width = $thumbw;
- $this->height = $thumbh;
- } elseif ($border == 0) {
- if ($specific_size) {
- $width = $thumbw;
- $height = $thumbh;
- } else {
- $scale = ($this->width > 0 && $this->height > 0) ? min($thumbw / $this->width, $thumbh / $this->height) : 0;
- $width = (int)($this->width * $scale);
- $height = (int)($this->height * $scale);
- }
- $deltaw = 0;
- $deltah = 0;
- $dst_img = @ImageCreateTrueColor($width, $height);
- @imagealphablending($dst_img, false);
- @imagesavealpha($dst_img, true);
- $this->width = $width;
- $this->height = $height;
- }
- $src_img = $this->bg;
- @ImageCopyResampled($dst_img, $src_img, $deltaw, $deltah, 0, 0, $width, $height, ImageSX($src_img), ImageSY($src_img));
- $this->bg = $dst_img;
- @imagedestroy($src_img);
- }
- public function send_image($file = '', $compress = -1, $convert_file_to = null) {
- if (!$this->image_validated) return false;
- $compress = (int)$compress;
- $type = $this->type;
- if (!empty($convert_file_to) && in_array($convert_file_to, $this->allowed_extensions)) {
- $type = $convert_file_to;
- }
- switch ($type) {
- case 'jpeg':
- case 'jpg':
- if (!$file) header("Content-type: image/jpeg");
- if ($compress == -1) $compress = 100;
- return imagejpeg($this->bg, $file, $compress);
- break;
- case 'png':
- if (!$file) header("Content-type: image/png");
- if ($compress != -1) {
- @imagetruecolortopalette($this->bg, true, $compress);
- }
- return imagepng($this->bg, $file, $compress);
- break;
- case 'gif':
- if (!$file) header("Content-type: image/gif");
- if ($compress != -1) {
- @imagetruecolortopalette($this->bg, true, $compress);
- }
- return imagegif($this->bg, $file, $compress);
- break;
- default: return 0;
- }
-
- @imagedestroy($this->bg);
-
- }
-
-
-
-
-
- }
|