PHP Tutorial After uploading images, automatically cropped to thumbnails, width is not limited to high
$Id: image.php 1937 2009-01-05 19:09:40z Dualface $
/**
* Define Helper_image class and Helper_imagegd class
*
* @link http://qeephp.com/
* @copyright Copyright (c) 2006-2009 Qeeyuan Inc. {@link http://www.qeeyuan.com}
* @license New BSD license {@link http://qeephp.com/license/}
* @version $Id: image.php 1937 2009-01-05 19:09:40z Dualface $
* @package Helper
*/
/**
* The Helper_image class encapsulates the operation for the image
*
* Developers cannot directly construct instances of this class, but should use Helper_image::createfromfile ()
* Static method creates an instance of an Image class.
*
* When working with large images, make sure PHP is able to allocate enough memory.
*
* @author Yulei Liao
* @version $Id: image.php 1937 2009-01-05 19:09:40z Dualface $
* @package Helper
*/
Abstract class Helper_image
{
/**
* Create Helper_imagegd object from specified file
*
Usage
* @code PHP
* $image = helper_image::createfromfile (' 1.jpg ');
* $image->resize ($width, $height);
* $image->saveasjpeg (' 2.jpg ');
* @endcode
*
* For uploaded files, the extension is not included because of its temporary file name.
* Therefore, you need to create an Image object using the following method:
*
* @code PHP
* $ext = pathinfo ($_files[' postfile ' [' name '], pathinfo_extension);
* $image = image::createfromfile ($_files[' postfile ' [' tmp_name '], $ext);
* @endcode
*
* @param string $filename The full path to the image file
* @param string $fileext Specify the extension
*
* @return Helper_imagegd HELPER_IMAGEGD objects created from a file
* @throw q_notimplementedexception
*/
static function CreateFromFile ($filename, $fileext)
{
$fileext = Trim (Strtolower ($fileext), '. ');
$ext 2functions = Array (
' jpg ' = ' imagecreatefromjpeg ',
' jpeg ' = ' imagecreatefromjpeg ',
' png ' = ' imagecreatefrompng ',
' gif ' = ' imagecreatefromgif '
);
if (!isset ($ext 2functions[$fileext]))
{
throw new Q_notimplementedexception (__ (' Imagecreateform '. $fileext));
}
$handle = Call_user_func ($ext 2functions[$fileext], $filename);
return new HELPER_IMAGEGD ($handle);
}
/**
* Converts a 16 binary color value to an RGB value
*
* Usage:
* @code php
* $color = ' #369 ';
* List ($r, $g, $b) = Helper_i Mage::hex2rgb ($color);
* echo "red: {$r}, Green: {$g}, Blue: {$b}";
* @endcode
*
* @param string $color color value
* @param string $default The default color returned when using an invalid color value
*
* @return Arra Y an array of RGB tri-Colors
*/
Static function Hex2rgb ($color, $default = ' ffffff ')
{
$hex = Trim ($color, ' #&hh ');
$len = strlen ($hex);
if ($len = = 3)
{
$hex = "{$hex [0]}{$hex [0]}{$hex [1]}{$hex [1]}{$hex [2]}{$hex [2]}";
}
ElseIf ($len < 6)
{
$hex = $default;
}
$dec = Hexdec ($hex);
Return Array ($dec >> & 0xFF, ($dec >> 8) & 0xFF, $dec & 0xff);
}
}
/**
* The Helper_imagegd class encapsulates a GD handle for manipulating images
*
* @author Yulei Liao
* @version $Id: image.php 1937 2009-01-05 19:09:40z Dualface $
* @package Helper
*/
Class Helper_imagegd
{
/**
* GD Resource handle
*
* @var Resource
*/
protected $_handle = null;
/**
* Constructor function
*
* @param resource $handle GD resource handle
*/
function __construct ($handle)
{
$this->_handle = $handle;
}
/**
* destructor
*/
function __destruct ()
{
$this->destroy ();
}
/**
* Quickly scale images to a specified size (poor quality)
*
* @param int $width new width
* @param int $height new height
*
* @return Helper_imagegd Returns the Helper_imagegd object itself for a coherent interface
*/
function Resize ($width, $height)
{
if (Is_null ($this->_handle)) return $this;
$dest = Imagecreatetruecolor ($width, $height);
Imagecopyresized ($dest, $this->_handle, 0, 0, 0, 0,
$width, $height,
Imagesx ($this->_handle), Imagesy ($this->_handle));
Imagedestroy ($this->_handle);
$this->_handle = $dest;
return $this;
}
/**
* Zoom image to a specified size (better quality, slower than resize ())
*
* @param int $width new width
* @param int $height new height
*
* @return Helper_imagegd Returns the Helper_imagegd object itself for a coherent interface
*/
function resampled ($width, $height)
{
if (Is_null ($this->_handle)) return $this;
$dest = Imagecreatetruecolor ($width, $height);
Imagecopyresampled ($dest, $this->_handle, 0, 0, 0, 0,
$width, $height,
Imagesx ($this->_handle), Imagesy ($this->_handle));
Imagedestroy ($this->_handle);
$this->_handle = $dest;
return $this;
}
/**
* Resizing the image without zooming
*
Usage
* @code PHP
* $image->resizecanvas ($width, $height, ' top-left ');
* @endcode
*
* $pos parameter specifies where the image content is aligned when the image is resized.
* The available values for $pos parameters are:
*
*-Left: right-aligned
*-Right: Justified
*-Center: Centre alignment
*-top: Top Align
*-bottom: Bottom alignment
*-Top-left, Left-top: upper left corner aligned
*-Top-right, right-top: Align upper right corner
*-Bottom-left, Left-bottom: Align Left bottom corner
*-Bottom-right, Right-bottom: Align Right bottom corner
*
* If an invalid $pos parameter is specified, it is equivalent to specifying center.
*
* @param int $width new height
* @param int $height new width
* @param string $pos changes in image position when adjusting
* @param the default color of the blank part of string $bgcolor
*
* @return Helper_imagegd Returns the Helper_imagegd object itself for a coherent interface
*/
function Resizecanvas ($width, $height, $pos = ' center ', $bgcolor = ' 0xffffff ')
{
if (Is_null ($this->_handle)) return $this;
$dest = Imagecreatetruecolor ($width, $height);
$SX = Imagesx ($this->_handle);
$sy = Imagesy ($this->_handle);
//Based on the Pos property to determine how to position the original picture
switch (strtolower ($pos))
{
case ' left ':
$ox = 0;
$oy = ($height-$sy)/ 2;
break;
Case ' right ':
$ox = $width-$SX,
$oy = ($height-$sy)/2;
Break,
case ' top ':
$ox = ($width-$ SX)/2;
$oy = 0;
break;
Case ' bottom ':
$ox = ($width-$SX)/2,
$oy = $height-$sy;
Break,
case ' top-left ':
Case ' left- Top ':
$ox = $oy = 0;
Break,
case ' top-right ':
Case ' right-top ':
$ox = $width-$sx;
$oy = 0;
B Reak;
Case ' bottom-left ':
Case ' left-bottom ':
$ox = 0;
$oy = $height-$sy,
Break,
case ' bottom-right ':
Case ' Right-bottom ':
$ox = $width-$SX,
$oy = $height-$sy;
break;
Default:
$ox = ($width-$SX )/2;
$oy = ($height-$sy)/2;
}
List ($r, $g, $b) = Helper_image::hex2rgb ($bgcolor, ' 0xffffff ');
$bgcolor = Imagecolorallocate ($dest, $r, $g, $b);
Imagefilledrectangle ($dest, 0, 0, $width, $height, $bgcolor);
Imagecolordeallocate ($dest, $bgcolor);
Imagecopy ($dest, $this->_handle, $ox, $oy, 0, 0, $SX, $sy);
Imagedestroy ($this->_handle);
$this->_handle = $dest;
return $this;
}
/**
* Cut the image to a specified size while maintaining the image aspect ratio
*
* Crop () maintains the aspect ratio of the image when zooming the image, ensuring that the image does not pull high or flatten.
*
* Crop () The maximum scaling is calculated by default in terms of $width and $height parameters.
* Keep the image of the cut to the fullest extent possible with images.
*
* For example, the size of the source map is 600, while the specified $width and $height are 200 and 100.
* Then the source map will be reduced to a size of x 150, then the extra 50 pixel height is cut off.
*
Usage
* @code PHP
* $image->crop ($width, $height);
* @endcode
*
* If you want the final build picture to always contain the full image content, you should specify $options parameters.
* The available values for this parameter are:
*
*-Fullimage: Whether to keep the full image
*-POS: Alignment when zooming
*-bgcolor: background color of extra part when zooming
*-Enlarge: whether to allow amplification
*-Reduce: Whether to allow Zoom out
*
* Where available values for $options [' POS '] parameters are:
*
*-Left: right-aligned
*-Right: Justified
*-Center: Centre alignment
*-top: Top Align
*-bottom: Bottom alignment
*-Top-left, Left-top: upper left corner aligned
*-Top-right, right-top: Align upper right corner
*-Bottom-left, Left-bottom: Align Left bottom corner
*-Bottom-right, Right-bottom: Align Right bottom corner
*
* If an invalid $pos parameter is specified, it is equivalent to specifying center.
*
* Each of the options in the $options can be specified individually, such as placing the image in the lower-right corner of the new picture when clipping is allowed.
*
* @code PHP
* $image->crop ($width, $height, Array (' pos ' = ' right-bottom '));
* @endcode
*
* @param int $width new width
* @param int $height new height
* @param array $options cut options
*
* @return Helper_imagegd Returns the Helper_imagegd object itself for a coherent interface
*/
function crop ($width, $height, $options = Array ())
{
if (Is_null ($this->_handle)) return $this;
$default _options = Array (
' Fullimage ' = False,
' pos ' = ' center ',
' bgcolor ' = ' 0xfff ',
' Enlarge ' = False,
' Reduce ' = true,
);
$options = Array_merge ($default _options, $options);
Create a target image
$dest = Imagecreatetruecolor ($width, $height);
Fill background color
List ($r, $g, $b) = Helper_image::hex2rgb ($options [' bgcolor '], ' 0xffffff ');
$bgcolor = Imagecolorallocate ($dest, $r, $g, $b);
Imagefilledrectangle ($dest, 0, 0, $width, $height, $bgcolor);
Imagecolordeallocate ($dest, $bgcolor);
Calculates the aspect ratio based on the source graph
$full _w = imagesx ($this->_handle);
$full _h = Imagesy ($this->_handle);
$ratio _w = Doubleval ($width)/Doubleval ($full _w);
$ratio _h = Doubleval ($height)/Doubleval ($full _h);
if ($options [' fullimage '])
{
If you want to maintain the full image, select the minimum ratio
$ratio = $ratio _w < $ratio _h? $ratio _w: $ratio _h;
}
Else
{
Otherwise select the maximum ratio
$ratio = $ratio _w > $ratio _h? $ratio _w: $ratio _h;
}
if (! $options [' enlarge '] && $ratio > 1) $ratio = 1;
if (! $options [' Reduce '] && $ratio < 1) $ratio = 1;
Calculate the width height and position of the target area
$DST _w = $full _w * $ratio;
$DST _h = $full _h * $ratio;
//Based on POS properties to determine how to locate
switch (strtolower ($options [' pos]))
{
case ' left ':
$dst _x = 0;
$dst _y = ($hei ght-$dst _h)/2;
break;
Case ' right ':
$dst _x = $width-$dst _w,
$dst _y = ($height-$dst _h)/2;
Break,
case ' top ':
$dst _ x = ($width-$dst _w)/2;
$dst _y = 0;
break;
Case ' bottom ':
$dst _x = ($width-$dst _w)/2,
$dst _y = $height-$dst _h;
Break,
case ' top-left ':
Case ' left-top ':
$dst _x = $dst _y = 0,
break,
case ' top-right ':
Case ' right-top ':
$dst _x = $width-$d St_w;
$dst _y = 0;
break;
Case ' bottom-left ':
Case ' left-bottom ':
$dst _x = 0;
$dst _y = $height-$dst _h,
Break,
case ' Botto M-right ':
Case ' right-bottom ':
$dst _x = $width-$dst _w,
$dst _y = $height-$dst _h;
break;
Case ' Cente R ':
Default:
$dst _x = ($width-$dst _w)/2;
$dst _y = ($height-$dst _h)/2;
}
Imagecopyresampled ($dest, $this->_handle, $dst _x, $dst _y, 0, 0, $dst _w, $dst _h, $full _w, $full _h);
Imagedestroy ($this->_handle);
$this->_handle = $dest;
return $this;
}
/**
* Save As JPEG file
*
* @param string $filename Save file name
* @param int $quality quality parameter, default is 80
*
* @return Helper_imagegd Returns the Helper_imagegd object itself for a coherent interface
*/
function Saveasjpeg ($filename, $quality = 80)
{
Imagejpeg ($this->_handle, $filename, $quality);
}
/**
* Save As PNG file
*
* @param string $filename Save file name
*
* @return Helper_imagegd Returns the Helper_imagegd object itself for a coherent interface
*/
function Saveaspng ($filename)
{
Imagepng ($this->_handle, $filename);
}
/**
* Save As GIF file
*
* @param string $filename Save file name
*
* @return Helper_imagegd Returns the Helper_imagegd object itself for a coherent interface
*/
function Saveasgif ($filename)
{
Imagegif ($this->_handle, $filename);
}
/**
* Destroy images in memory
*
* @return Helper_imagegd Returns the Helper_imagegd object itself for a coherent interface
*/
function Destroy ()
{
if (! $this->_handle)
{
@imagedestroy ($this->_handle);
}
$this->_handle = null;
return $this;
}
}
Calling methods
$image = Helper_image::createfromfile (' c:a.jpg ', ' jpg ');
$image->resampled (100, 100); Zoom to 100px * 100PX
$image->saveasjpeg (' c:a_output.jpg ', 100);
http://www.bkjia.com/PHPjc/632971.html www.bkjia.com true http://www.bkjia.com/PHPjc/632971.html techarticle php Tutorial upload pictures, automatically cut into thumbnails, wide open-ended? PHP//$Id: image.php 1937 2009-01-05 19:09:40z dualface $/** * Define Helper_image classes and Helper_i Magegd class * ...