0byt3m1n1
Path:
/
data
/
applications
/
aps
/
tikiwiki
/
7.0-0
/
standard
/
htdocs
/
lib
/
images
/
[
Home
]
File: gd.php
<?php // (c) Copyright 2002-2011 by authors of the Tiki Wiki CMS Groupware Project // // All Rights Reserved. See copyright.txt for details and a complete list of authors. // Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. // $Id: gd.php 33195 2011-03-02 17:43:40Z changi67 $ require_once('lib/images/abstract.php'); class Image extends ImageAbstract { var $gdinfo; var $gdversion; var $havegd = false; function __construct($image, $isfile = false, $format = 'jpeg') { // Which GD Version do we have? $exts = get_loaded_extensions(); if ( in_array('gd', $exts) && ! empty($image) ) { $this->havegd = true; $this->get_gdinfo(); if ($isfile) { $this->filename = $image; parent::__construct(NULL, false); $this->loaded = false; } else { parent::__construct($image, false); $this->format = $format; $this->loaded = false; } } else { $this->havegd = false; $this->gdinfo = array(); } } function _load_data() { if (!$this->loaded && $this->havegd) { if (!empty($this->filename) && is_file($this->filename)) { $this->format = strtolower(substr($this->filename, strrpos($this->filename, '.') + 1)); list($this->width, $this->height, $type) = getimagesize($this->filename); if (function_exists("image_type_to_extension")) { $this->format = image_type_to_extension($type,false); } else { $tmp = image_type_to_mime_type($type); $this->format = strtolower(substr($tmp,strrpos($tmp,"/")+1)); } if ( $this->is_supported($this->format) ) { if ( $this->format == 'jpg' ) $this->format = 'jpeg'; $this->data = call_user_func('imagecreatefrom'.$this->format, $this->filename); $this->loaded = true; } } elseif (!empty($this->data)) { $this->data = imagecreatefromstring($this->data); $this->loaded = true; } } } function _resize($x, $y) { if ($this->data) { $t = imagecreatetruecolor($x, $y); imagecopyresampled($t, $this->data, 0, 0, 0, 0, $x, $y, $this->get_width(), $this->get_height()); $this->data = $t; unset($t); } } function resizethumb() { if ( $this->thumb !== null ) { $this->data = imagecreatefromstring($this->thumb); $this->loaded = true; } else { $this->_load_data(); } return parent::resizethumb(); } function display() { $this->_load_data(); if ($this->data) { @ob_end_flush(); // ignore E_NOTICE if no buffer ob_start(); switch ( strtolower($this->format) ) { case 'jpeg': case 'jpg': imagejpeg($this->data); break; case 'gif': imagegif($this->data); break; case 'png': imagepng($this->data); break; case 'wbmp': imagewbmp($this->data); break; default: ob_end_clean(); return NULL; } $image = ob_get_contents(); ob_end_clean(); return $image; } else { return NULL; } } function rotate($angle) { $this->_load_data(); if ($this->data) { $this->data = imagerotate($this->data, $angle, 0); return true; } else { return false; } } function get_gdinfo() { $gdinfo = array(); $gdversion = ''; if ( function_exists("gd_info") ) { $gdinfo = gd_info(); preg_match("/[0-9]+\.[0-9]+/", $gdinfo["GD Version"], $gdversiontmp); $gdversion = $gdversiontmp[0]; } else { //next try ob_start(); phpinfo (INFO_MODULES); $gdversion = preg_match('/GD Version.*2.0/', ob_get_contents()) ? '2.0' : '1.0'; $gdinfo["JPG Support"] = preg_match('/JPG Support.*enabled/', ob_get_contents()); $gdinfo["PNG Support"] = preg_match('/PNG Support.*enabled/', ob_get_contents()); $gdinfo["GIF Create Support"] = preg_match('/GIF Create Support.*enabled/', ob_get_contents()); $gdinfo["WBMP Support"] = preg_match('/WBMP Support.*enabled/', ob_get_contents()); $gdinfo["XBM Support"] = preg_match('/XBM Support.*enabled/', ob_get_contents()); ob_end_clean(); } if ( isset($this) ) { $this->gdinfo = $gdinfo; $this->gdversion = $gdversion; } return $gdinfo; } // This method do not need to be called on an instance function is_supported($format) { if ( ! function_exists('imagetypes') ) { $gdinfo = isset($this) ? $this->gdinfo : Image::get_gdinfo(); } switch ( strtolower($format) ) { case 'jpeg': case 'jpg': if ( isset($gdinfo) && $gdinfo['JPG Support'] ) { return true; } else { return ( imagetypes() & IMG_JPG ); } case 'png': if ( isset($gdinfo) && $gdinfo['PNG Support'] ) { return true; } else { return ( imagetypes() & IMG_PNG ); } case 'gif': if ( isset($gdinfo) && $gdinfo['GIF Create Support'] ) { return true; } else { return ( imagetypes() & IMG_GIF ); } case 'wbmp': if ( isset($gdinfo) && $gdinfo['WBMP Support']) { return true; } else { return ( imagetypes() & IMG_WBMP ); } case 'xpm': if ( isset($gdinfo) && $gdinfo['XPM Support']) { return true; } else { return ( imagetypes() & IMG_XPM ); } } return false; } function _get_height() { if ($this->loaded && $this->data) { return imagesy($this->data); } else if ($this->height) { return $this->height; } else if ($this->filename) { list($this->width, $this->height, $type) = getimagesize($this->filename); if ($this->height) { return $this->height; } } if (!$this->loaded || !$this->data) { $this->_load_data(); } if ($this->data) { return imagesy($this->data); } } function _get_width() { if ($this->loaded && $this->data) { return imagesx($this->data); } else if ($this->width) { return $this->width; } else if ($this->filename) { list($this->width, $this->height, $type) = getimagesize($this->filename); if ($this->width) { return $this->width; } } if (!$this->loaded || !$this->data) { $this->_load_data(); } if ($this->data) { return imagesx($this->data); } } }