首页 > 语言 > PHP > 正文

php生成缩略图,文本转换成图形

2024-09-04 11:44:20
字体:
来源:转载
供稿:网友

这是一款老外的经典的php生成缩略图类函数,文件灵活实用,可以生成任何风格的图片,并且可以把文本转换成图形.

php生成缩略图,文本转换成图形实例代码如下:

  1. copyright   : smart-info limited. all right reserved. 
  2.  author      : jacky cheung 
  3.  version     : 1.1 
  4.  create date : 24 september 2008 
  5.  last modify : 15 march 2009 
  6. */ 
  7.  
  8. class gd 
  9.  var $font_face   = ""
  10.  var $text   = ""
  11.  var $size    = 12; 
  12.  var $color   = "#000000"
  13.  var $angle   = 0; 
  14.  
  15.  var $width   = 0; 
  16.  var $height   = 0; 
  17.  var $line_height = 0; 
  18.   
  19.  var $type   = "png"
  20.  var $chmod   = 0777; 
  21.  var $bg_color  = "#ffffff"
  22.  var $quality  = 95; 
  23.  var $antialias  = true; 
  24.   
  25.  var $x    = 0; 
  26.  var $y    = 0; 
  27.   
  28.  
  29.  /*___| convert text to image |___*/ 
  30.   public function text2image ( $font_face=""$text=""$attributes=false, $width=0, $all=false ) 
  31.   { 
  32.    $this->font_face  = $font_face
  33.    $this->text   = $text
  34.    $this->width  = $width
  35.    $this->size   = 12; 
  36.    $this->color  = "#000000"
  37.    $this->angle  = 0; 
  38.    $this->line_height = 0; 
  39.    $this->setprop ( $attributes ); 
  40.     
  41.    if ( $this->width == 0 ) 
  42.    { 
  43.     return $this->convert_text2image ( $this->text, $this->check_text_width( $this->text ) ); 
  44.    } else { 
  45.     // word wrap 
  46.     if ( $all === false ) 
  47.     { 
  48.      $text = split(" "$this->text); 
  49.      $text = $this->word_wrap($this->text, $this->width, "<br>"); 
  50.      $text = split("<br>"$text ); 
  51.     } else if ( $all === true ) { 
  52.      $temp = array(); 
  53.      for ( $i=0; $i<strlen($this->text); $i++ ) 
  54.      { 
  55.       array_push ( $temp, mb_substr($this->text, $i, 1, "utf-8") ); 
  56.      } 
  57.      $text = array(); 
  58.      $count_width = 0; 
  59.      $i = 0; 
  60.      foreach ( $temp as $k => $t ) 
  61.      { 
  62.       $prop = $this->check_text_width($t); 
  63.       if ( $count_width + floatval($prop["width"]) < $this->width ) 
  64.       { 
  65.        $text[$i] = $text[$i] . $t
  66.        $count_width += floatval($prop["width"]); 
  67.       } else { 
  68.        $count_width = 0; 
  69.        $i++; 
  70.        $text[$i] = ""
  71.       } 
  72.      } 
  73.     } 
  74.      
  75.     $img = array(); 
  76.     foreach ( $text as $k => $t ) 
  77.     { 
  78.      $img[$k] = $this->convert_text2image ( $t,  $this->check_text_width( $t ) ); 
  79.     } 
  80.      
  81.     $w = 0; 
  82.     $h = 0; 
  83.     foreach ( $img as $k => $v ) 
  84.     { 
  85.      $w = (imagesx($img[$k]) > $w) ? imagesx($img[$k]) : $w
  86.  
  87.      if ($this->line_height == 0 ) $h += imagesy($img[$k]); 
  88.      else $h += ($k < count($img)-1) ? $this->line_height : imagesy($img[$k]); 
  89.     } 
  90.      
  91.     $base_img = $this->createtransparent($w$h); 
  92.     $locy = 0; 
  93.     foreach ( $img as $k => $v ) 
  94.     { 
  95.      if ($k > 0) 
  96.      { 
  97.       $locy = ($this->line_height == 0) ? $locy + imagesy($img[$k]) : $locy + $this->line_height; 
  98.      } 
  99.      $base_img = $this->attachgdimage ( $img[$k], $base_imgarray ("x"=>0, "y"=>$locy) ); 
  100.     } 
  101.     return $base_img
  102.    } 
  103.   } 
  104.   private function word_wrap( $str$width$break )  
  105.   {  
  106.    $formatted = '';  
  107.    $position = -1;  
  108.    $prev_position = 0;  
  109.    $last_line = -1;  
  110.     
  111.    /// looping the string stop at each space  
  112.    while$position = mb_stripos( $str" ", ++$position'utf-8' ) ) {  
  113.     if$position > $last_line + $width + 1 ) {  
  114.      $formatted.= mb_substr( $str$last_line + 1, $prev_position - $last_line - 1, 'utf-8' ).$break;  
  115.      $last_line = $prev_position;  
  116.     }  
  117.     $prev_position = $position;  
  118.    }  
  119.     
  120.    /// adding last line without the break  
  121.    $formatted.= mb_substr( $str$last_line + 1, mb_strlen( $str ), 'utf-8' );  
  122.    return $formatted;  
  123.   } 
  124.  
  125.  
  126.   public function convert_text2image ( $text$prop ) 
  127.   { 
  128.    $im   = imagecreatetruecolor ( $prop["width"], $prop["height"] ); 
  129.    $rgb   = $this->getrgb ( $this->color ); 
  130.    $color   = imagecolorallocate ( $im$rgb["red"], $rgb["green"], $rgb["blue"] ); 
  131.    $img   = $this->createtransparent ( $prop["width"], $prop["height"] ); 
  132.    imagettftext ( $img$this->size, $this->angle, 0, $prop["height"] - abs ( $prop["top"] ), $color$this->font_face, $text ); 
  133.    return $img
  134.   } 
  135.   public function check_text_width ( $text ) 
  136.   { 
  137.    $prop = array(); 
  138.    $bbox    = imagettfbbox ( $this->size, $this->angle, $this->font_face, $text ); 
  139.    $prop["left"]  = $bbox[0]; 
  140.    $prop["right"]  = $bbox[2]; 
  141.    $prop["top"] = $bbox[1]; 
  142.    $prop["bottom"] = $bbox[7]; 
  143.    $padding  = 2; 
  144.    
  145.    $prop["width"]  = abs($prop["left"]) + abs($prop["right"])  + $padding
  146.    $prop["height"] = abs($prop["top"])  + abs($prop["bottom"]) + $padding
  147.     
  148.    return $prop
  149.   } 
  150.  
  151.  
  152.  /*___| save to image file |___*/ 
  153.   public function save($gdimage$filename$attributes=false) 
  154.   { 
  155.    $this->type   = "png"
  156.    $this->chmod   = 0777; 
  157.    $this->bg_color  = "#ffffff"
  158.    $this->quality  = 95; 
  159.    $this->antialias = true; 
  160.     
  161.    $this->setprop ( $attributes ); 
  162.     
  163.    // process 
  164.    switch ( strtolower ( $this->type ) ) 
  165.    { 
  166.     case "jpeg"
  167.     case "jpg"
  168.      $gdimage = $this->createbackground($gdimage, imagesx($gdimage), imagesy($gdimage)); 
  169.      imagejpeg ( $gdimage$filename$this->quality ); 
  170.      break
  171.     case "gif"
  172.      $gdimage = $this->createbackground($gdimage, imagesx($gdimage), imagesy($gdimage)); 
  173.      imagegif ( $gdimage$filename ); 
  174.      break;    
  175.     case "png"
  176.     default : 
  177.      imagepng ( $gdimage$filename ); 
  178.      break
  179.    } 
  180.    chmod ( $filename$this->chmod ); 
  181.   } 
  182.  
  183.  
  184.  /*___| create gd background image |___*/ 
  185.   public function createbackground($gdimage$width$height
  186.   { 
  187.    $img = imagecreatetruecolor ( $width$height ); 
  188.    $rgb = $this->getrgb ( $this->bg_color ); 
  189.    $color = imagecolorallocate ( $img$rgb["red"], $rgb["green"], $rgb["blue"] ); 
  190.    imagefill ( $img, 0, 0, $color ); 
  191.    imagecopyresampled ( $img$gdimage, 0, 0, 0, 0, $width$height$width$height ); 
  192.    return $img
  193.   } 
  194.  
  195.  
  196.  /*___| create gd transparent image |___*/ 
  197.   public function createtransparent($width$height
  198.   { 
  199.    $img = imagecreatetruecolor($width$height); 
  200.    imagealphablending($img, false); 
  201.    imagesavealpha($img, true); 
  202.    $transparent = imagecolorallocatealpha($img, 0, 0, 0, 127); 
  203.    imagefilledrectangle($img, 0, 0, $width$height$transparent); 
  204.    imagecopyresampled($img$img, 0, 0, 0, 0, $width$height$width$height); 
  205.    return $img
  206.   } 
  207.  
  208.   
  209.  /*___| load image |___*/ 
  210.   public function createimagefrom($filename$alpha=true) 
  211.   { 
  212.    if ( function_exists ( "exif_imagetype" ) ) 
  213.    { 
  214.     if ( exif_imagetype ( $filename )   == imagetype_jpeg ) { return $this->createfromjpeg ( $filename ); } 
  215.     else if ( exif_imagetype ( $filename )  == imagetype_gif  ) { return $this->createfromgif  ( $filename ); } 
  216.     else if ( exif_imagetype ( $filename )  == imagetype_png  ) { return $this->createfrompng  ( $filename$alpha ); } 
  217.    } 
  218.    else 
  219.    { 
  220.     if ( strstr ( strtoupper ( $filename )  , ".jpg" )  || strstr ( strtoupper ( $filename ), ".jpeg" )) { return $this->createfromjpeg ( $filename ); } 
  221.     else if ( strstr ( strtoupper ( $filename ) , ".gif" )) { return $this->createfromgif ( $filename ); } 
  222.     else if ( strstr ( strtoupper ( $filename ) , ".png" )) { return $this->createfrompng ( $filename$alpha ); } 
  223.    } 
  224.    return false; 
  225.   } 
  226.   private function createfromjpeg ( $filename ) { return imagecreatefromjpeg ( $filename ); } 
  227.   private function createfromgif  ( $filename ) { return imagecreatefromgif  ( $filename ); } 
  228.   private function createfrompng  ( $filename$alpha=true ) 
  229.   { 
  230.    if ( $alpha ) 
  231.    { 
  232.     list ( $width$height ) = getimagesize ( $filename ); 
  233.     $png_img = imagecreatefrompng ( $filename ); 
  234.     $img = imagecreatetruecolor ( $width$height ); 
  235.     imagealphablending ( $img, false ); 
  236.     imagesavealpha ( $img, true ); 
  237.     imagecopyresampled ( $img$png_img, 0, 0, 0, 0, $width$height$width$height ); 
  238.    } else { 
  239.     $img = imagecreatefrompng ( $filename ); 
  240.    }  
  241.    return $img
  242.   } 
  243.   
  244.   
  245.  /*___| attach background image |___*/ 
  246.   public function attachbackgroundimage ( $gdimage$filename$attributes=false ) 
  247.   { 
  248.    $this->x = 0; 
  249.    $this->y = 0; 
  250.    $this->setprop ( $attributes ); 
  251.    
  252.    $img = $this->createimagefrom ( $filename ); 
  253.    imagecopyresampled ( $img$gdimage$this->x, $this->y, 0, 0, imagesx($gdimage), imagesy($gdimage), imagesx($gdimage), imagesy($gdimage) ); 
  254.    return $img
  255.   } 
  256.  
  257.  
  258.  /*___| attach image |___*/ 
  259.   public function attachimage ( $source$target$filename$image_attributes=false, $attributes=false ) 
  260.   { 
  261.    $source_img = $this->createimagefrom ( $source ); 
  262.    $target_img = $this->attachbackgroundimage ( $source_img$target$attributes ); 
  263.    $this->save ( $target_img$filename$image_attributes ); 
  264.   } 
  265.    
  266.   
  267.  /*___| attach gd image resource |___*/ 
  268.   public function attachgdimage ( $gd_source$gd_target$attributes=false ) 
  269.   { 
  270.    $this->x  = 0; 
  271.    $this->y  = 0; 
  272.    $this->width = 0; 
  273.    $this->height = 0; 
  274.    $this->setprop ( $attributes ); 
  275.     
  276.    imagealphablending($gd_target, true ); 
  277.    imagealphablending($gd_source, true ); 
  278.    imagecopy ( $gd_target$gd_source$this->x, $this->y, 0, 0, imagesx($gd_source), imagesy($gd_source) ); 
  279.    return $gd_target
  280.   } 
  281.   
  282.   
  283.  /*___| get rgb color |___*/ 
  284.   public function getrgb($hex
  285.   { 
  286.    $rgb["red"]   = hexdec ( substr ( $hex, 1, 2 ) ) ; 
  287.    $rgb["green"] = hexdec ( substr ( $hex, 3, 2 ) ) ; 
  288.    $rgb["blue"]  = hexdec ( substr ( $hex, 5, 2 ) ) ; 
  289.    return $rgb
  290.   } 
  291.   
  292.   
  293.  /*___| set properties |___*/  
  294.   private function setprop ( $attributes=false ) 
  295.   { 
  296.    if ( $attributes ) { foreach  ( $attributes as $key => $value ) { $k = strtoupper ( $key ); $this->$k = $value; } } 
  297.   } 
  298. //开源代码Vevb.com 
  299. //调用 方法代码如下: 
  300.  
  301. $imgresize = new imagetransform(); 
  302. $imgresize->sourcefile = $source.$file
  303. $imgresize->targetfile = $destination.$file
  304. $imgresize->chmodvalue = 0777;  
  305. $imgresize->resizetowidth = $tw
  306. $imgresize->resizetoheight = $th
  307. $imgresize->jpegoutputquality = 100; 
  308. $imgresize->resizeifsmaller = false; 
  309. $imgresize->resize(); 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表