您好,欢迎访问一九零五行业门户网

PHP如何生成自适应大小的缩略图

生成缩略图的php类,新建一个文件叫做 thumbnailimage.php,文件名最好不要用大写。
src_file = $src_file; $this->dest_file = stdout; $this->dest_type = thumb_jpeg; $this->interlace = interlace_off; $this->jpeg_quality = -1; $this->max_width = 100; $this->max_height = 90; $this->fit_to_max = false; $this->logo['file'] = no_logo; $this->logo['vert_pos'] = pos_top; $this->logo['horz_pos'] = pos_left; $this->label['text'] = no_label; $this->label['vert_pos'] = pos_bottom; $this->label['horz_pos'] = pos_right; $this->label['font'] = ''; $this->label['size'] = 20; $this->label['color'] = '#000000'; $this->label['angle'] = 0; }// ****************************************************************************// private methods// **************************************************************************** /* description: extracts decimal color components from hex color string. prototype: array parsecolor ( string hex_color ) parameters: hex_color - color in '#rrggbb' format return: decimal values for red, green and blue color components. */ function parsecolor ( $hex_color ) { if ( strpos ( $hex_color, '#' ) === 0 ) $hex_color = substr ( $hex_color, 1 ); $r = hexdec ( substr ( $hex_color, 0, 2 ) ); $g = hexdec ( substr ( $hex_color, 2, 2 ) ); $b = hexdec ( substr ( $hex_color, 4, 2 ) ); return array ( $r, $g, $b ); } /* description: retrives image data as a string. thanks to luis larrateguy for the idea of this function. prototype: string getimagestr ( string image_file ) parameters: image_file - filename of image return: image file contents string. */ function getimagestr ( $image_file ) { if ( function_exists ( 'file_get_contents' ) ) { $str = @file_get_contents ( $image_file ); if ( ! $str ) { $err = sprintf( e_002, $image_file ); trigger_error( $err, e_user_error ); } return $str; } $f = fopen ( $image_file, 'rb' ); if ( ! $f ) { $err = sprintf( e_002, $image_file ); trigger_error( $err, e_user_error ); } $fsz = @filesize ( $image_file ); if ( ! $fsz ) $fsz = max_img_size; $str = fread ( $f, $fsz ); fclose ( $f ); return $str; } /* description: loads image from file. prototype: resource loadimage ( string image_file, int &image_width, int &image_height ) parameters: image_file - filename of image image_width - width of loaded image image_height - height of loaded image return: image identifier representing the image obtained from the given file. */ function loadimage ( $image_file, &$image_width, &$image_height ) { $image_width = 0; $image_height = 0; $image_data = $this->getimagestr( $image_file ); $image = imagecreatefromstring ( $image_data ); if ( ! $image ) { $err = sprintf( e_003, $image_file ); trigger_error( $err, e_user_error ); } $image_width = imagesx ( $image ); $image_height = imagesy ( $image ); return $image; } /* description: calculates thumbnail image sizes from source image width and height. prototype: array getthumbsize ( int src_width, int src_height ) parameters: src_width - width of source image src_height - height of source image return: an array with 2 elements. index 0 contains the width of thumbnail image and index 1 contains the height. */ 生成缩略图 function getthumbsize ( $src_width, $src_height ) { $max_width = $this->max_width; $max_height = $this->max_height; $x_ratio = $max_width / $src_width; $y_ratio = $max_height / $src_height; $is_small = ( $src_width if ( ! $this->fit_to_max && $is_small ) { $dest_width = $src_width; $dest_height = $src_height; } elseif ( $x_ratio * $src_height { $dest_width = $max_width; $dest_height = ceil ( $x_ratio * $src_height ); } else { $dest_width = ceil ( $y_ratio * $src_width ); $dest_height = $max_height; } return array ( $dest_width, $dest_height ); } /* description: adds logo image to thumbnail. prototype: void addlogo ( int thumb_width, int thumb_height, resource &thumb_img ) parameters: thumb_width - width of thumbnail image thumb_height - height of thumbnail image thumb_img - thumbnail image identifier */ function addlogo ( $thumb_width, $thumb_height, &$thumb_img ) { extract ( $this->logo ); $logo_image = $this->loadimage ( $file, $logo_width, $logo_height ); if ( $vert_pos == pos_center ) $y_pos = ceil ( $thumb_height / 2 - $logo_height / 2 ); elseif ($vert_pos == pos_bottom) $y_pos = $thumb_height - $logo_height; else $y_pos = 0; if ( $horz_pos == pos_center ) $x_pos = ceil ( $thumb_width / 2 - $logo_width / 2 ); elseif ( $horz_pos == pos_right ) $x_pos = $thumb_width - $logo_width; else $x_pos = 0; if ( ! imagecopy ( $thumb_img, $logo_image, $x_pos, $y_pos, 0, 0, $logo_width, $logo_height ) ) trigger_error( e_004, e_user_error ); } /* description: adds label text to thumbnail. prototype: void addlabel ( int thumb_width, int thumb_height, resource &thumb_img ) parameters: thumb_width - width of thumbnail image thumb_height - height of thumbnail image thumb_img - thumbnail image identifier */ function addlabel ( $thumb_width, $thumb_height, &$thumb_img ) { extract ( $this->label ); list( $r, $g, $b ) = $this->parsecolor ( $color ); $color_id = imagecolorallocate ( $thumb_img, $r, $g, $b ); $text_box = imagettfbbox ( $size, $angle, $font, $text ); $text_width = $text_box [ 2 ] - $text_box [ 0 ]; $text_height = abs ( $text_box [ 1 ] - $text_box [ 7 ] ); if ( $vert_pos == pos_top ) $y_pos = 5 + $text_height; elseif ( $vert_pos == pos_center ) $y_pos = ceil( $thumb_height / 2 - $text_height / 2 ); elseif ( $vert_pos == pos_bottom ) $y_pos = $thumb_height - $text_height; if ( $horz_pos == pos_left ) $x_pos = 5; elseif ( $horz_pos == pos_center ) $x_pos = ceil( $thumb_width / 2 - $text_width / 2 ); elseif ( $horz_pos == pos_right ) $x_pos = $thumb_width - $text_width -5; imagettftext ( $thumb_img, $size, $angle, $x_pos, $y_pos, $color_id, $font, $text ); } /* description: output thumbnail image into the browser. prototype: void outputthumbimage ( resource dest_image ) parameters: dest_img - thumbnail image identifier */ 输出缩略图 function outputthumbimage ( $dest_image ) { imageinterlace ( $dest_image, $this->interlace ); header ( 'content-type: ' . $this->dest_type ); if ( $this->dest_type == thumb_jpeg ) imagejpeg ( $dest_image, '', $this->jpeg_quality ); elseif ( $this->dest_type == thumb_gif ) imagegif($dest_image); elseif ( $this->dest_type == thumb_png ) imagepng ( $dest_image ); } /* description: save thumbnail image into the disc file. prototype: void savethumbimage ( string image_file, resource dest_image ) parameters: image_file - destination file name dest_img - thumbnail image identifier */ function savethumbimage ( $image_file, $dest_image ) { imageinterlace ( $dest_image, $this->interlace ); if ( $this->dest_type == thumb_jpeg ) imagejpeg ( $dest_image, $this->dest_file, $this->jpeg_quality ); elseif ( $this->dest_type == thumb_gif ) imagegif ( $dest_image, $this->dest_file ); elseif ( $this->dest_type == thumb_png ) imagepng ( $dest_image, $this->dest_file ); }// ****************************************************************************// public methods// **************************************************************************** /* description: output thumbnail image into the browser or disc file according to the values of parameters. prototype: void output ( ) */ 生成缩略图片 function output() { $src_image = $this->loadimage($this->src_file, $src_width, $src_height); $dest_size = $this->getthumbsize($src_width, $src_height); $dest_width=$dest_size[0]; $dest_height=$dest_size[1]; $dest_image=imagecreatetruecolor($dest_width, $dest_height); if (!$dest_image) trigger_error(e_005, e_user_error); imagecopyresampled( $dest_image, $src_image, 0, 0, 0, 0, $dest_width, $dest_height, $src_width, $src_height ); if ($this->logo['file'] != no_logo) $this->addlogo($dest_width, $dest_height, $dest_image); if ($this->label['text'] != no_label) $this->addlabel($dest_width, $dest_height, $dest_image); if ($this->dest_file == stdout) $this->outputthumbimage ( $dest_image ); else $this->savethumbimage ( $this->dest_file, $dest_image ); imagedestroy ( $src_image ); imagedestroy ( $dest_image ); }} // end of class definition?>
复制代码
使用方法:1、首先引用该php文件(不要告诉我不会)2、调用代码
$tis = new thumbnailimage();$tis->src_file = 这里写源文件的路径$tis->dest_type = thumb_jpeg;//生成图片的类型是 jpg$tis->dest_file = '这里写目标文件的路径';$tis->max_width = 120;//自适应大小,但是最大宽度为120$tis->max_height = 4000; //自适应大小,但是最大高度为4000$tis->output();
复制代码
代码关键在于:max_width 和max_height,一般来说除非图片很有个性,否则缩略图生成的还是很不错的。
其它类似信息

推荐信息