php生成缩略图(文本转换成图形)

copyright   : smart-info limited. all right reserved.
 author      : jacky cheung
 version     : 1.1
 create date : 24 september 2008
 last modify : 15 march 2009
*/

class gd
{
 var $font_face   = "";
 var $text   = "";
 var $size    = 12;
 var $color   = "#000000";
 var $angle   = 0;

 var $width   = 0;
 var $height   = 0;
 var $line_height = 0;
 
 var $type   = "png";
 var $chmod   = 0777;
 var $bg_color  = "#ffffff";
 var $quality  = 95;
 var $antialias  = true;
 
 var $x    = 0;
 var $y    = 0;
 

 /*___| convert text to image |___*/
  public function text2image ( $font_face="", $text="", $attributes=false, $width=0, $all=false )
  {
   $this->font_face  = $font_face;
   $this->text   = $text;
   $this->width  = $width;
   $this->size   = 12;
   $this->color  = "#000000";
   $this->angle  = 0;
   $this->line_height = 0;
   $this->setprop ( $attributes );
   
   if ( $this->width == 0 )
   {
    return $this->convert_text2image ( $this->text, $this->check_text_width( $this->text ) );
   } else {
    // word wrap
    if ( $all === false )
    {
     $text = split(" ", $this->text);
     $text = $this->word_wrap($this->text, $this->width, "<br>");
     $text = split("<br>", $text );
    } else if ( $all === true ) {
     $temp = array();
     for ( $i=0; $i<strlen($this->text); $i++ )
     {
      array_push ( $temp, mb_substr($this->text, $i, 1, "utf-8") );
     }
     $text = array();
     $count_width = 0;
     $i = 0;
     foreach ( $temp as $k => $t )
     {
      $prop = $this->check_text_width($t);
      if ( $count_width + floatval($prop["width"]) < $this->width )
      {
       $text[$i] = $text[$i] . $t;
       $count_width += floatval($prop["width"]);
      } else {
       $count_width = 0;
       $i++;
       $text[$i] = "";
      }
     }
    }
    
    $img = array();
    foreach ( $text as $k => $t )
    {
     $img[$k] = $this->convert_text2image ( $t,  $this->check_text_width( $t ) );
    }
    
    $w = 0;
    $h = 0;
    foreach ( $img as $k => $v )
    {
     $w = (imagesx($img[$k]) > $w) ? imagesx($img[$k]) : $w;

     if ($this->line_height == 0 ) $h += imagesy($img[$k]);
     else $h += ($k < count($img)-1) ? $this->line_height : imagesy($img[$k]);
    }
    
    $base_img = $this->createtransparent($w, $h);
    $locy = 0;
    foreach ( $img as $k => $v )
    {
     if ($k > 0)
     {
      $locy = ($this->line_height == 0) ? $locy + imagesy($img[$k]) : $locy + $this->line_height;
     }
     $base_img = $this->attachgdimage ( $img[$k], $base_img, array ("x"=>0, "y"=>$locy) );
    }
    return $base_img;
   }
  }
  private function word_wrap( $str, $width, $break )
  {
   $formatted = '';
   $position = -1;
   $prev_position = 0;
   $last_line = -1;
   
   /// looping the string stop at each space
   while( $position = mb_stripos( $str, " ", ++$position, 'utf-8' ) ) {
    if( $position > $last_line + $width + 1 ) {
     $formatted.= mb_substr( $str, $last_line + 1, $prev_position - $last_line - 1, 'utf-8' ).$break;
     $last_line = $prev_position;
    }
    $prev_position = $position;
   }
   
   /// adding last line without the break
   $formatted.= mb_substr( $str, $last_line + 1, mb_strlen( $str ), 'utf-8' );
   return $formatted;
  }

  public function convert_text2image ( $text, $prop )
  {
   $im   = imagecreatetruecolor ( $prop["width"], $prop["height"] );
   $rgb   = $this->getrgb ( $this->color );
   $color   = imagecolorallocate ( $im, $rgb["red"], $rgb["green"], $rgb["blue"] );
   $img   = $this->createtransparent ( $prop["width"], $prop["height"] );
   imagettftext ( $img, $this->size, $this->angle, 0, $prop["height"] - abs ( $prop["top"] ), $color, $this->font_face, $text );
   return $img;
  }
  public function check_text_width ( $text )
  {
   $prop = array();
   $bbox    = imagettfbbox ( $this->size, $this->angle, $this->font_face, $text );
   $prop["left"]  = $bbox[0];
   $prop["right"]  = $bbox[2];
   $prop["top"] = $bbox[1];
   $prop["bottom"] = $bbox[7];
   $padding  = 2;
  
   $prop["width"]  = abs($prop["left"]) + abs($prop["right"])  + $padding;
   $prop["height"] = abs($prop["top"])  + abs($prop["bottom"]) + $padding;
   
   return $prop;
  }

 /*___| save to image file |___*/
  public function save($gdimage, $filename, $attributes=false)
  {
   $this->type   = "png";
   $this->chmod   = 0777;
   $this->bg_color  = "#ffffff";
   $this->quality  = 95;
   $this->antialias = true;
   
   $this->setprop ( $attributes );
   
   // process
   switch ( strtolower ( $this->type ) )
   {
    case "jpeg":
    case "jpg":
     $gdimage = $this->createbackground($gdimage, imagesx($gdimage), imagesy($gdimage));
     imagejpeg ( $gdimage, $filename, $this->quality );
     break;
    case "gif":
     $gdimage = $this->createbackground($gdimage, imagesx($gdimage), imagesy($gdimage));
     imagegif ( $gdimage, $filename );
     break;   
    case "png":
    default :
     imagepng ( $gdimage, $filename );
     break;
   }
   chmod ( $filename, $this->chmod );
  }

 /*___| create gd background image |___*/
  public function createbackground($gdimage, $width, $height)
  {
   $img = imagecreatetruecolor ( $width, $height );
   $rgb = $this->getrgb ( $this->bg_color );
   $color = imagecolorallocate ( $img, $rgb["red"], $rgb["green"], $rgb["blue"] );
   imagefill ( $img, 0, 0, $color );
   imagecopyresampled ( $img, $gdimage, 0, 0, 0, 0, $width, $height, $width, $height );
   return $img;
  }

 /*___| create gd transparent image |___*/
  public function createtransparent($width, $height)
  {
   $img = imagecreatetruecolor($width, $height);
   imagealphablending($img, false);
   imagesavealpha($img, true);
   $transparent = imagecolorallocatealpha($img, 0, 0, 0, 127);
   imagefilledrectangle($img, 0, 0, $width, $height, $transparent);
   imagecopyresampled($img, $img, 0, 0, 0, 0, $width, $height, $width, $height);
   return $img;
  }

 
 /*___| load image |___*/
  public function createimagefrom($filename, $alpha=true)
  {
   if ( function_exists ( "exif_imagetype" ) )
   {
    if ( exif_imagetype ( $filename )   == imagetype_jpeg ) { return $this->createfromjpeg ( $filename ); }
    else if ( exif_imagetype ( $filename )  == imagetype_gif  ) { return $this->createfromgif  ( $filename ); }
    else if ( exif_imagetype ( $filename )  == imagetype_png  ) { return $this->createfrompng  ( $filename, $alpha ); }
   }
   else
   {
    if ( strstr ( strtoupper ( $filename )  , ".jpg" )  || strstr ( strtoupper ( $filename ), ".jpeg" )) { return $this->createfromjpeg ( $filename ); }
    else if ( strstr ( strtoupper ( $filename ) , ".gif" )) { return $this->createfromgif ( $filename ); }
    else if ( strstr ( strtoupper ( $filename ) , ".png" )) { return $this->createfrompng ( $filename, $alpha ); }
   }
   return false;
  }
  private function createfromjpeg ( $filename ) { return imagecreatefromjpeg ( $filename ); }
  private function createfromgif  ( $filename ) { return imagecreatefromgif  ( $filename ); }
  private function createfrompng  ( $filename, $alpha=true )
  {
   if ( $alpha )
   {
    list ( $width, $height ) = getimagesize ( $filename );
    $png_img = imagecreatefrompng ( $filename );
    $img = imagecreatetruecolor ( $width, $height );
    imagealphablending ( $img, false );
    imagesavealpha ( $img, true );
    imagecopyresampled ( $img, $png_img, 0, 0, 0, 0, $width, $height, $width, $height );
   } else {
    $img = imagecreatefrompng ( $filename );
   } 
   return $img;
  }
 
 
 /*___| attach background image |___*/
  public function attachbackgroundimage ( $gdimage, $filename, $attributes=false )
  {
   $this->x = 0;
   $this->y = 0;
   $this->setprop ( $attributes );
  
   $img = $this->createimagefrom ( $filename );
   imagecopyresampled ( $img, $gdimage, $this->x, $this->y, 0, 0, imagesx($gdimage), imagesy($gdimage), imagesx($gdimage), imagesy($gdimage) );
   return $img;
  }

 /*___| attach image |___*/
  public function attachimage ( $source, $target, $filename, $image_attributes=false, $attributes=false )
  {
   $source_img = $this->createimagefrom ( $source );
   $target_img = $this->attachbackgroundimage ( $source_img, $target, $attributes );
   $this->save ( $target_img, $filename, $image_attributes );
  }
  
 
 /*___| attach gd image resource |___*/
  public function attachgdimage ( $gd_source, $gd_target, $attributes=false )
  {
   $this->x  = 0;
   $this->y  = 0;
   $this->width = 0;
   $this->height = 0;
   $this->setprop ( $attributes );
   
   imagealphablending($gd_target, true );
   imagealphablending($gd_source, true );
   imagecopy ( $gd_target, $gd_source, $this->x, $this->y, 0, 0, imagesx($gd_source), imagesy($gd_source) );
   return $gd_target;
  }
 
 
 /*___| get rgb color |___*/
  public function getrgb($hex)
  {
   $rgb["red"]   = hexdec ( substr ( $hex, 1, 2 ) ) ;
   $rgb["green"] = hexdec ( substr ( $hex, 3, 2 ) ) ;
   $rgb["blue"]  = hexdec ( substr ( $hex, 5, 2 ) ) ;
   return $rgb;
  }
 
 
 /*___| set properties |___*/ 
  private function setprop ( $attributes=false )
  {
   if ( $attributes ) { foreach  ( $attributes as $key => $value ) { $k = strtoupper ( $key ); $this->$k = $value; } }
  }
}

//调用 方法

 代码如下 复制代码
$imgresize = new imagetransform();
$imgresize->sourcefile = $source.$file;
$imgresize->targetfile = $destination.$file;
$imgresize->chmodvalue = 0777; 
$imgresize->resizetowidth = $tw;
$imgresize->resizetoheight = $th;
$imgresize->jpegoutputquality = 100;
$imgresize->resizeifsmaller = false;
$imgresize->resize();

?>

时间: 2024-12-22 13:57:34

php生成缩略图(文本转换成图形)的相关文章

python实现将文本转换成语音的方法

  本文实例讲述了python将文本转换成语音的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

用PHP实现自动把纯文本转换成Web页面

最近,我的一个老朋友向我打电话求助.他从事记者的职业有多年了,最近获得了重新出版他的很多早期专栏的权利.他希望把他的作品贴在Web上;但是他的专栏都是以纯文本文件的形式保存的,而且他既没有时间也不想去为了把它们转换成为Web页面而学习HTML的知识.由于我是他电话本里唯一一个精通计算机的人,所以他打电话给我看我是否能够帮帮他. "让我来处理吧,"我说:"一个小时以后再给我打电话."当然了,当他几个小时以后打电话过来,我已经为他准备好了解决的方法.这需要用到一点点PH

用PHP自动把纯文本转换成Web页面

  最近,我的一个老朋友向我打电话求助.他从事记者的职业有多年了,最近获得了重新出版他的很多早期专栏的权利.他希望把他的作品贴在Web上;但是他的专栏都是以纯文本文件的形式保存的,而且他既没有时间也不想去为了把它们转换成为Web页面而学习HTML的知识.由于我是他电话本里唯一一个精通计算机的人,所以他打电话给我看我是否能够帮帮他. "让我来处理吧,"我说:"一个小时以后再给我打电话."当然了,当他几个小时以后打电话过来,我已经为他准备好了解决的方法.这需要用到一点点

Excel中怎么将数字、文本转换成日期格式

1.先看我准备的excel表格的内容 2.现在我们要实现的是19900909这样文本数字转换成1990-09-09这样格式 3.从表中看出我们的所有字符长度都为8位所以我们总结出,前4位是出生年份,中间是月分,后面是天,所以我们可以利用excel中的Left(),Right()函数,mid()函数,我们的思路是将原来的字条串分成三段,然后用再连接起来,中间加入"-". 4.从8位数字中得到年,月,日 5.将它们连接起来得到日期,使用DATE()函数 6.好了说了半天我们只要一个公式即可

自动把纯文本转换成Web页面的php代码_php技巧

首先让我们来看一个我朋友希望转换的纯文本文件的例子: 以下为引用的内容: 复制代码 代码如下: Green for Mars! John R. Doe The idea of little green men from Mars, long a staple of science fiction, may soon turn out to be less fantasy and more fact. Recent samples sent by the latest Mars explorati

C# 怎样把文本转换成语音?

问题描述 谁能成功的?百度了很多貌似都不行..快倒下了..有大神不.. 解决方案 解决方案二:找个语音库,然后调用解决方案三:记得有个DLL的..不知道具体步骤了..惨解决方案四:用SpeechSDK就可以了解决方案五:能详细点不..引用3楼的回复: 用SpeechSDK就可以了 解决方案六:我好像装了哪些不会导入..代码不是问题问题是导入那些解决方案七:该回复于2012-06-12 09:45:14被版主删除解决方案八:1.下载SpeechSDK:2.安装SpeechSDK:3.然后参考:ht

php把txt文本转换成数组并保存数据库

今天有一个工作要做就是把一个达5万条的记录的txt 文件的内容要保存到数据库,开始想到用file_get_contents后来就看到可以用file更简单,下面是我写的程序. <?php  include_once('../inc/connect.php');  class fso_getline{   var $filename ='number.txt';   var $content;   var $arr;      function read_line(){       if(file_

powershell 将文本转换成表格的另一种可行方式_PowerShell

复制代码 代码如下: $text=" 1 梦幻西游 216406 2014-01-21 资料片 2 炉石传说 15905 2014-01-24 公测 3 新大话西游 214465 2002-08-01 公测 4 问道 11322 2006-04-22 公测 5 沃土 10094 2014-04-23 内测 6 QQ仙灵 10056 2014-06-06 公测 7 神武 10011 2010-09-17 公测 8 大侠Q传 9576 2014-06-27 内测 9 女神三国 9343 2014-0

wps2016文本如何快速转换成表格

  如何把word文档里的文本转换成表格呢? 1.打开需要编辑的word文档,然后选中需要转换的文字内容 2.接着点击"插入"选项中的"表格",然后选择"文本转换成表格" 3.接着我们就可以设置表格的行数列数以及相关的表格参数啦,设置完毕点击确认即可. 4.这个时候回到word文档,我们就可以看到文本已经转换成表格啦.