📄 transform.php
字号:
<?php/************************************************************************* Title.........: Image Transformation Interface** Version.......: 1.0** Author........: Xiang Wei ZHUO <wei@zhuo.org>** Filename......: Transform.php** Last changed..: 30 Aug 2003 ** Notes.........: Orginal is from PEAR Added a few extra, - create unique filename in a particular directory, used for temp image files. - added cropping to GD, NetPBM, ImageMagick**/// +----------------------------------------------------------------------+// | PHP Version 4 |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2002 The PHP Group |// +----------------------------------------------------------------------+// | This source file is subject to version 2.02 of the PHP license, |// | that is bundled with this package in the file LICENSE, and is |// | available at through the world-wide-web at |// | http://www.php.net/license/2_02.txt. |// | If you did not receive a copy of the PHP license and are unable to |// | obtain it through the world-wide-web, please send a note to |// | license@php.net so we can mail you a copy immediately. |// +----------------------------------------------------------------------+// | Authors: Peter Bowyer <peter@mapledesign.co.uk> |// | Alan Knowles <alan@akbkhome.com> |// | Vincent Oostindie <vincent@sunlight.tmfweb.nl> |// +----------------------------------------------------------------------+//// $Id: Transform.php 26 2004-03-31 02:35:21Z Wei Zhuo $//// Image Transformation interface///** * The main "Image_Resize" class is a container and base class which * provides the static methods for creating Image objects as well as * some utility functions (maths) common to all parts of Image Resize. * * The object model of DB is as follows (indentation means inheritance): * * Image_Resize The base for each Image implementation. Provides default * | implementations (in OO lingo virtual methods) for * | the actual Image implementations as well as a bunch of * | maths methods. * | * +-Image_GD The Image implementation for the PHP GD extension . Inherits * Image_Resize * When calling DB::setup for GD images the object returned is an * instance of this class. * * @package Image Resize * @version 1.00 * @author Peter Bowyer <peter@mapledesign.co.uk> * @since PHP 4.0 */Class Image_Transform{ /** * Name of the image file * @var string */ var $image = ''; /** * Type of the image file (eg. jpg, gif png ...) * @var string */ var $type = ''; /** * Original image width in x direction * @var int */ var $img_x = ''; /** * Original image width in y direction * @var int */ var $img_y = ''; /** * New image width in x direction * @var int */ var $new_x = ''; /** * New image width in y direction * @var int */ var $new_y = ''; /** * Path the the library used * e.g. /usr/local/ImageMagick/bin/ or * /usr/local/netpbm/ */ var $lib_path = ''; /** * Flag to warn if image has been resized more than once before displaying * or saving. */ var $resized = false; var $uid = ''; var $lapse_time =900; //15 mins /** * Create a new Image_resize object * * @param string $driver name of driver class to initialize * * @return mixed a newly created Image_Transform object, or a PEAR * error object on error * * @see PEAR::isError() * @see Image_Transform::setOption() */ function &factory($driver) { if ('' == $driver) { die("No image library specified... aborting. You must call ::factory() with one parameter, the library to load."); } $this->uid = md5($_SERVER['REMOTE_ADDR']); include_once "$driver.php"; $classname = "Image_Transform_Driver_{$driver}"; $obj =& new $classname; return $obj; } /** * Resize the Image in the X and/or Y direction * If either is 0 it will be scaled proportionally * * @access public * * @param mixed $new_x (0, number, percentage 10% or 0.1) * @param mixed $new_y (0, number, percentage 10% or 0.1) * * @return mixed none or PEAR_error */ function resize($new_x = 0, $new_y = 0) { // 0 means keep original size $new_x = (0 == $new_x) ? $this->img_x : $this->_parse_size($new_x, $this->img_x); $new_y = (0 == $new_y) ? $this->img_y : $this->_parse_size($new_y, $this->img_y); // Now do the library specific resizing. return $this->_resize($new_x, $new_y); } // End resize /** * Scale the image to have the max x dimension specified. * * @param int $new_x Size to scale X-dimension to * @return none */ function scaleMaxX($new_x) { $new_y = round(($new_x / $this->img_x) * $this->img_y, 0); return $this->_resize($new_x, $new_y); } // End resizeX /** * Scale the image to have the max y dimension specified. * * @access public * @param int $new_y Size to scale Y-dimension to * @return none */ function scaleMaxY($new_y) { $new_x = round(($new_y / $this->img_y) * $this->img_x, 0); return $this->_resize($new_x, $new_y); } // End resizeY /** * Scale Image to a maximum or percentage * * @access public * @param mixed (number, percentage 10% or 0.1) * @return mixed none or PEAR_error */ function scale($size) { if ((strlen($size) > 1) && (substr($size,-1) == '%')) { return $this->scaleByPercentage(substr($size, 0, -1)); } elseif ($size < 1) { return $this->scaleByFactor($size); } else { return $this->scaleByLength($size); } } // End scale /** * Scales an image to a percentage of its original size. For example, if * my image was 640x480 and I called scaleByPercentage(10) then the image * would be resized to 64x48 * * @access public * @param int $size Percentage of original size to scale to * @return none */ function scaleByPercentage($size) { return $this->scaleByFactor($size / 100); } // End scaleByPercentage /** * Scales an image to a factor of its original size. For example, if * my image was 640x480 and I called scaleByFactor(0.5) then the image * would be resized to 320x240. * * @access public * @param float $size Factor of original size to scale to * @return none */ function scaleByFactor($size) { $new_x = round($size * $this->img_x, 0); $new_y = round($size * $this->img_y, 0); return $this->_resize($new_x, $new_y); } // End scaleByFactor /** * Scales an image so that the longest side has this dimension. * * @access public * @param int $size Max dimension in pixels * @return none */ function scaleByLength($size) { if ($this->img_x >= $this->img_y) { $new_x = $size; $new_y = round(($new_x / $this->img_x) * $this->img_y, 0); } else { $new_y = $size; $new_x = round(($new_y / $this->img_y) * $this->img_x, 0); } return $this->_resize($new_x, $new_y); } // End scaleByLength /** * * @access public * @return void */ function _get_image_details($image) { //echo $image; $data = @GetImageSize($image); #1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF(intel byte order), 8 = TIFF(motorola byte order, # 9 = JPC, 10 = JP2, 11 = JPX, 12 = JB2, 13 = SWC if (is_array($data)){ switch($data[2]){ case 1: $type = 'gif'; break; case 2: $type = 'jpeg'; break; case 3: $type = 'png'; break; case 4: $type = 'swf'; break; case 5: $type = 'psd'; case 6: $type = 'bmp'; case 7: case 8: $type = 'tiff'; default: echo("We do not recognize this image format");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -