After uploading an image in php, the image is automatically cropped to a thumbnail with no width or height. After uploading an image in the php Tutorial, the image will be automatically cropped to a thumbnail. what is the width and height? Php $ Id: image. php19372009-01-0519: 09: 40 Zdualface $ *** defines the Helper_Image class and Helper_ImageGD class * php Tutorial after uploading an image, automatically crop it to a thumbnail, width is not limited to height
// $ Id: image. php 1937 19: 09: 40Z dualface $
/**
* Defines the 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 19: 09: 40Z dualface $
* @ Package helper
*/
/**
* The Helper_Image class encapsulates operations on images.
*
* Developers cannot directly construct instances of this class, but should use Helper_Image: createFromFile ()
* Create an Image class instance using static methods.
*
* When operating on large images, make sure that php can allocate enough memory.
*
* @ Author YuLei Liao
* @ Version $ Id: image. php 1937 19: 09: 40Z dualface $
* @ Package helper
*/
Abstract class Helper_Image
{
/**
* Create a Helper_ImageGD object from a specified file
*
* Usage:
* @ Code php
* $ Image = Helper_Image: createFromFile('1.jpg ');
* $ Image-> resize ($ width, $ height );
* $ Image-> saveas(('2.jpg ');
* @ Endcode
*
* For uploaded files, the temporary file name does not contain the extension.
* Therefore, you must use the following method to create an Image object:
*
* @ Code php
* $ Ext = pathinfo ($ _ FILES ['postfile'] ['name'], PATHINFO_EXTENSION );
* $ Image = Image: createFromFile ($ _ FILES ['postfile'] ['tmp _ name'], $ ext );
* @ Endcode
*
* @ Param string $ full path of the filename image file
* @ Param string $ fileext specifies the extension
*
* @ Return Helper_ImageGD the Helper_ImageGD object created from the file
* @ Throw Q_NotImplementedException
*/
Static function createFromFile ($ filename, $ fileext)
{
$ Fileext = trim (strtolower ($ fileext ),'.');
$ Ext2functions = array (
'Jpg '=> 'imagecreatefromjpeg ',
'Jpeg '=> 'imagecreatefromjpeg ',
'PNG '=> 'imagecreatefrompng ',
'Gif' => 'imagecreatefromgif'
);
If (! Isset ($ ext2functions [$ fileext])
{
Throw new Q_NotImplementedException (_ ('imagecreateform'. $ fileext ));
}
$ Handle = call_user_func ($ ext2functions [$ fileext], $ filename );
Return new Helper_ImageGD ($ handle );
}
/**
* Convert hexadecimal color values to rgb values
*
* Usage:
* @ Code php
* $ Color = '#369 ';
* List ($ r, $ g, $ B) = Helper_Image: hex2rgb ($ color );
* Echo "red: {$ r}, green: {$ g}, blue: {$ B }";
* @ Endcode
*
* @ Param string $ color value
* @ Param string $ default: the default color returned when invalid color values are used
*
* @ Return array an array composed of three colors: RGB
*/
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> 16) & 0xff, ($ dec> 8) & 0xff, $ dec & 0xff );
}
}
/**
* The Helper_ImageGD class encapsulates a gd handle for image operations.
*
* @ Author YuLei Liao
* @ Version $ Id: image. php 1937 19: 09: 40Z dualface $
* @ Package helper
*/
Class Helper_ImageGD
{
/**
* GD resource handle
*
* @ Var resource
*/
Protected $ _ handle = null;
/**
* Constructor
*
* @ Param resource $ handle GD resource handle
*/
Function _ construct ($ handle)
{
$ This-> _ handle = $ handle;
}
/**
* Destructor
*/
Function _ destruct ()
{
$ This-> destroy ();
}
/**
* Quickly scale the image to a specified size (poor quality)
*
* @ Param int $ new width
* @ Param int $ new height
*
* @ Return Helper_ImageGD returns the Helper_ImageGD object and implements 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;
}
/**
* Scale the image to the specified size (the quality is better and the speed is slower than resize)
*
* @ Param int $ new width
* @ Param int $ new height
*
* @ Return Helper_ImageGD returns the Helper_ImageGD object and implements 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;
}
/**
* Adjust the image size without scaling
*
* Usage:
* @ Code php
* $ Image-> resizeCanvas ($ width, $ height, 'top-left ');
* @ Endcode
*
* The $ pos parameter specifies the hour when the image size is adjusted and where the image content is aligned.
* $ Available pos parameters include:
*
*-Left: left alignment
*-Right: right-aligned
*-Center: center alignment
*-Top: top alignment
*-Bottom: bottom alignment
*-Top-left, left-top: alignment in the upper left corner
*-Top-right, right-top: alignment in the upper right corner
*-Bottom-left, left-bottom: align in the lower left corner
*-Bottom-right, right-bottom: bottom right corner alignment
*
* If an invalid $ pos parameter is specified, it is equivalent to the specified center.
*
* @ Param int $ new width height
* @ Param int $ new width of height
* @ Param string $ changes in image position when pos is adjusted
* @ Param string $ default color of the blank part of bgcolor
*
* @ Return Helper_ImageGD returns the Helper_ImageGD object and implements 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 );
// Determine how to locate the original image based on the pos attribute
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;
Break;
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 aspect ratio.
*
* When zooming an image, crop () can maintain the aspect ratio of the image to ensure that the image is not raised or squashed.
*
* Crop () calculates the maximum scale according to the $ width and $ height parameters by default,
* The cropped image can be filled with images to the maximum extent.
*
* For example, the source image size is 800x600, while the specified $ width and $ height are 200 and 100.
* The source image is first reduced to 200x150, and then the extra 50 pixel height is reduced.
*
* Usage:
* @ Code php
* $ Image-> crop ($ width, $ height );
* @ Endcode
*
* If you want the final generated image to always contain the complete image content, you should specify the $ options parameter.
* Available values of this parameter include:
*
*-Fullimage: whether to keep the full image
*-Pos: alignment mode during scaling
*-Bgcolor: The background color of the excess part during scaling.
*-Enlarge: whether to allow amplification
*-Reduce: whether to allow downgrading
*
* The available values of the $ options ['pos'] parameter are:
*
*-Left: left alignment
*-Right: right-aligned
*-Center: center alignment
*-Top: top alignment
*-Bottom: bottom alignment
*-Top-left, left-top: alignment in the upper left corner
*-Top-right, right-top: alignment in the upper right corner
*-Bottom-left, left-bottom: align in the lower left corner
*-Bottom-right, right-bottom: bottom right corner alignment
*
* If an invalid $ pos parameter is specified, it is equivalent to the specified center.
*
* $ Options can be specified separately for each option. for example, you can place the image in the lower right corner of the new image when you allow cropping.
*
* @ Code php
* $ Image-> crop ($ width, $ height, array ('pos' => 'right-bottom '));
* @ Endcode
*
* @ Param int $ new width
* @ Param int $ new height
* @ Param array $ options cut options
*
* @ Return Helper_ImageGD returns the Helper_ImageGD object and implements a coherent interface.
*/
Function crop ($ width, $ height, $ options = array ())
{
If (is_null ($ this-> _ handle) return $ this;
$ Default_options = array (
'Fullage' => false,
'Pos' => 'center ',
'Bgcolor' => '0xfff ',
'Enabled' => false,
'Reduce' => true,
);
$ Options = array_merge ($ default_options, $ options );
// Create the target image
$ Dest = imagecreatetruecolor ($ width, $ height );
// Fill in the 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 );
// Calculate the aspect ratio based on the source image
$ 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 ['fullage'])
{
// If you want to keep 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 ['enabled'] & $ ratio> 1) $ ratio = 1;
If (! $ Options ['reduce'] & $ ratio <1) $ ratio = 1;
// Calculate the width and height of the target region.
$ Dst_w = $ full_w * $ ratio;
$ Dst_h = $ full_h * $ ratio;
// Determine how to locate the pos attribute
Switch (strtolower ($ options ['pos'])
{
Case 'left ':
$ Dst_x = 0;
$ Dst_y = ($ height-$ 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-$ dst_w;
$ Dst_y = 0;
Break;
Case 'bottom-left ':
Case 'left-bottom ':
$ Dst_x = 0;
$ Dst_y = $ height-$ dst_h;
Break;
Case 'bottom-right ':
Case 'right-bottom ':
$ Dst_x = $ width-$ dst_w;
$ Dst_y = $ height-$ dst_h;
Break;
Case 'center ':
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 a JPEG file
*
* @ Param string $ filename save the file name
* @ Param int $ quality parameter. the default value is 80.
*
* @ Return Helper_ImageGD returns the Helper_ImageGD object and implements a coherent interface.
*/
Function saveAsJpeg ($ filename, $ quality = 80)
{
Imagejpeg ($ this-> _ handle, $ filename, $ quality );
}
/**
* Save as a PNG file
*
* @ Param string $ filename save the file name
*
* @ Return Helper_ImageGD returns the Helper_ImageGD object and implements a coherent interface.
*/
Function saveAsPng ($ filename)
{
Imagepng ($ this-> _ handle, $ filename );
}
/**
* Save as a GIF file
*
* @ Param string $ filename save the file name
*
* @ Return Helper_ImageGD returns the Helper_ImageGD object and implements a coherent interface.
*/
Function saveAsGif ($ filename)
{
Imagegif ($ this-> _ handle, $ filename );
}
/**
* Destroy images in memory
*
* @ Return Helper_ImageGD returns the Helper_ImageGD object and implements a coherent interface.
*/
Function destroy ()
{
If (! $ This-> _ handle)
{
@ Imagedestroy ($ this-> _ handle );
}
$ This-> _ handle = null;
Return $ this;
}
}
Call method
$ Image = Helper_Image: createFromFile ('C: a.jpg ', 'jpg ');
$ Image-> resampled (100,100); // scale to 100px * 100PX
$ Image-> saveAsJpeg ('C: a_output.jpg ', 100 );
Why? Php // $ Id: image. php 1937 19: 09: 40Z dualface $/*** defines the Helper_Image class and Helper_ImageGD class *...