This article mainly introduces the PHP full-featured no-deformation Image cropping operation class and usage, and analyzes the cropping, scaling, and other related skills of php operating images in the form of examples, for more information, see the examples in this article to describe the PHP full-featured no-deformation Image cropping operation class and usage. We will share this with you for your reference. The details are as follows:
If you want to crop an image or generate a thumbnail, there is basically no problem. all the required functions are in it and there is no deformation.
Here we are divided into four modes:
1. crop any image to a specified size. if it exceeds the specified size, crop the image in the play and maximize the scaling. if it is not enough, stretch the image,
2. if the image is not scaled out or scaled out, the image is added to the White List. the png transparency can be used to remove the image.
3. retain all image information. No cropping, only scaling, insufficient padding.
4. retain all image information. No cropping, only scaling, insufficient do not fill in the white, the generated image is the actual effective pixel size, for example, if an image is 600X600 and you want to generate 120X100, the actual valid pixel after scaling is 100X100. Therefore, only X images are generated, in the third mode, the size of X is generated, and the value is white.
The code is as follows:
Crop (, 80, 2); * $ ic-> SaveImage (); * // $ ic-> SaveAlpha (); convert the padding into transparent pixels and save * $ ic-> destory (); ***/class ImageCrop {var $ sImage; var $ dImage; var $ src_file; var $ dst_file; var $ src_width; var $ src_height; var $ src_ext; var $ src_type; function ImageCrop ($ src_file, $ dst_file = '') {$ this-> src_file = $ src_file; $ this-> dst_file = $ dst_file; $ this-> LoadImage ();} function SetSrcFile ($ src_file) {$ this-> src_file = $ src_fil E;} function SetDstFile ($ dst_file) {$ this-> dst_file = $ dst_file;} function LoadImage () {list ($ this-> src_width, $ this-> src_height, $ this-> src_type) = getimagesize ($ this-> src_file); switch ($ this-> src_type) {case IMAGETYPE_JPEG: $ this-> sImage = imagecreatefromjpeg ($ this-> src_file); $ this-> ext = 'jpg '; break; case IMAGETYPE_PNG: $ this-> sImage = imagecreatefrompng ($ this-> src_file); $ this-> ext = 'PNG '; bre Ak; case IMAGETYPE_GIF: $ this-> sImage = imagecreatefromgif ($ this-> src_file); $ this-> ext = 'GIF'; break; default: exit ();}} function SaveImage ($ fileName = '') {$ this-> dst_file = $ fileName? $ FileName: $ this-> dst_file; switch ($ this-> src_type) {case IMAGETYPE_JPEG: imagejpeg ($ this-> dImage, $ this-> dst_file, 100); break; case IMAGETYPE_PNG: imagepng ($ this-> dImage, $ this-> dst_file); break; case IMAGETYPE_GIF: imagegif ($ this-> dImage, $ this-> dst_file); break; default: break;} function OutImage () {switch ($ this-> src_type) {case IMAGETYPE_JPEG: header ('content-type: image/jpeg '); imagej Peg ($ this-> dImage); break; case IMAGETYPE_PNG: header ('content-type: image/png '); imagepng ($ this-> dImage); break; case IMAGETYPE_GIF: header ('content-type: image/GIF'); imagegif ($ this-> dImage); break; default: break ;}} function SaveAlpha ($ fileName = '') {$ this-> dst_file = $ fileName? $ FileName. '.png ': $ this-> dst_file .'.png'; imagesavealpha ($ this-> dImage, true); imagepng ($ this-> dImage, $ this-> dst_file );} function OutAlpha () {imagesavealpha ($ this-> dImage, true); header ('content-type: image/png '); imagepng ($ this-> dImage );} function destory () {imagedestroy ($ this-> sImage); imagedestroy ($ this-> dImage);} function Crop ($ dst_width, $ dst_height, $ mode = 1, $ dst_file = '') {if ($ dst_fil E) $ this-> dst_file = $ dst_file; $ this-> dImage = imagecreatetruecolor ($ dst_width, $ dst_height); $ bg = imagecolorallocatealpha ($ this-> dImage, 255,255,255,127 ); imagefill ($ this-> dImage, 0, 0, $ bg); imagecolortransparent ($ this-> dImage, $ bg ); $ ratio_w = 1.0 * $ dst_width/$ this-> src_width; $ ratio_h = 1.0 * $ dst_height/$ this-> src_height; $ ratio = 1.0; switch ($ mode) {case 1: // always crop if ($ ratio_w <1 & $ Ratio_h <1) | ($ ratio_w> 1 & $ ratio_h> 1) {$ ratio = $ ratio_w <$ ratio_h? $ Ratio_h: $ ratio_w; $ tmp_w = (int) ($ dst_width/$ ratio); $ tmp_h = (int) ($ dst_height/$ ratio ); $ tmp_img = imagecreatetruecolor ($ tmp_w, $ tmp_h); $ src_x = (int) ($ this-> src_width-$ tmp_w)/2); $ src_y = (int) ($ this-> src_height-$ tmp_h)/2); imagecopy ($ tmp_img, $ this-> sImage, 0, 0, $ src_x, $ src_y, $ tmp_w, $ tmp_h); imagecopyresampled ($ this-> dImage, $ tmp_img, 0, 0, 0, $ dst_width, $ dst_height, $ tmp_w, $ tmp_h); ima Gedestroy ($ tmp_img);} else {$ ratio = $ ratio_w <$ ratio_h? $ Ratio_h: $ ratio_w; $ tmp_w = (int) ($ this-> src_width * $ ratio); $ tmp_h = (int) ($ this-> src_height * $ ratio ); $ tmp_img = values ($ tmp_w, $ tmp_h); imagecopyresampled ($ tmp_img, $ this-> sImage, $ tmp_w, $ tmp_h, $ this-> src_width, $ this-> src_height); $ src_x = (int) ($ tmp_w-$ dst_width)/2; $ src_y = (int) ($ tmp_h-$ dst_height)/2; imagecopy ($ this-> dImage, $ tmp_img, 0, $ src_x, $ src_y, $ dst_w Idth, $ dst_height); imagedestroy ($ tmp_img);} break; case 2: // only small if ($ ratio_w <1 & $ ratio_h <1) {$ ratio = $ ratio_w <$ ratio_h? $ Ratio_h: $ ratio_w; $ tmp_w = (int) ($ dst_width/$ ratio); $ tmp_h = (int) ($ dst_height/$ ratio ); $ tmp_img = imagecreatetruecolor ($ tmp_w, $ tmp_h); $ src_x = (int) ($ this-> src_width-$ tmp_w)/2; $ src_y = (int) ($ this-> src_height-$ tmp_h)/2; imagecopy ($ tmp_img, $ this-> sImage, 0, $ src_x, $ src_y, $ tmp_w, $ tmp_h ); imagecopyresampled ($ this-> dImage, $ tmp_img, 0, 0, 0, $ dst_width, $ dst_height, $ tmp_w, $ tmp_h); imagede Stroy ($ tmp_img);} elseif ($ ratio_w> 1 & $ ratio_h> 1) {$ dst_x = (int) abs ($ dst_width-$ this-> src_width) /2; $ dst_y = (int) abs ($ dst_height-$ this-> src_height)/2; imagecopy ($ this-> dImage, $ this-> sImage, $ dst_x, $ dst_y, 0, 0, $ this-> src_width, $ this-> src_height);} else {$ src_x = 0; $ dst_x = 0; $ src_y = 0; $ dst_y = 0; if ($ dst_width-$ this-> src_width) <0) {$ src_x = (int) ($ this-> src_width-$ dst_width )/2; $ dst_x = 0;} else {$ src_x = 0; $ dst_x = (int) ($ dst_width-$ this-> src_width)/2 ;} if ($ dst_height-$ this-> src_height) <0) {$ src_y = (int) ($ this-> src_height-$ dst_height)/2; $ dst_y = 0;} else {$ src_y = 0; $ dst_y = (int) ($ dst_height-$ this-> src_height)/2 ;} imagecopy ($ this-> dImage, $ this-> sImage, $ dst_x, $ dst_y, $ src_x, $ src_y, $ this-> src_width, $ this-> src_height );} break; case 3: // keep All image size and create need size if ($ ratio_w> 1 & $ ratio_h> 1) {$ dst_x = (int) (abs ($ dst_width-$ this-> src_width) /2); $ dst_y = (int) (abs ($ dst_height-$ this-> src_height)/2); imagecopy ($ this-> dImage, $ this-> sImage, $ dst_x, $ dst_y, 0, 0, $ this-> src_width, $ this-> src_height);} else {$ ratio = $ ratio_w> $ ratio_h? $ Ratio_h: $ ratio_w; $ tmp_w = (int) ($ this-> src_width * $ ratio); $ tmp_h = (int) ($ this-> src_height * $ ratio ); $ tmp_img = values ($ tmp_w, $ tmp_h); imagecopyresampled ($ tmp_img, $ this-> sImage, $ tmp_w, $ tmp_h, $ this-> src_width, $ this-> src_height); $ dst_x = (int) (abs ($ tmp_w-$ dst_width)/2); $ dst_y = (int) (abs ($ tmp_h-$ dst_height)/2); imagecopy ($ this-> dImage, $ tmp_img, $ dst_x, $ dst_y, 0, 0, $ Tmp_w, $ tmp_h); imagedestroy ($ tmp_img);} break; case 4: // keep all image but create actually size if ($ ratio_w> 1 & $ ratio_h> 1) {$ this-> dImage = imagecreatetruecolor ($ this-> src_width, $ this-> src_height); imagecopy ($ this-> dImage, $ this-> sImage, 0, 0, 0, $ this-> src_width, $ this-> src_height);} else {$ ratio = $ ratio_w> $ ratio_h? $ Ratio_h: $ ratio_w; $ tmp_w = (int) ($ this-> src_width * $ ratio); $ tmp_h = (int) ($ this-> src_height * $ ratio ); $ this-> dImage = imagecreatetruecolor ($ tmp_w, $ tmp_h); imagecopyresampled ($ this-> dImage, $ this-> sImage, 0, 0, 0, $ tmp_w, $ tmp_h, $ this-> src_width, $ this-> src_height);} break;} // end Crop}?>
I hope this article will help you with PHP programming.
For more PHP full-featured, non-variant Image cropping operations and usage examples, please follow the PHP Chinese network!