ホームページ > バックエンド開発 > PHPチュートリアル > PHP でサムネイルを生成する (テキストをグラフィックスに変換する)_PHP チュートリアル

PHP でサムネイルを生成する (テキストをグラフィックスに変換する)_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:45:38
オリジナル
881 人が閲覧しました

phpはサムネイルを生成します(テキストをグラフィックに変換します) これは、Office によって開発された古典的な PHP サムネイル生成機能であり、任意のスタイルの画像を生成し、テキストをグラフィックに変換できます。

サムネイルを生成する(テキストをグラフィックスに変換する)phpチュートリアル
これは Banwai が開発した古典的な PHP サムネイル生成機能であり、あらゆるスタイルの画像を生成し、テキストをグラフィックに変換できます。

著作権:smart-infolimited.
著者:ジャッキー・チャン
バージョン : 1.1
作成日: 2008 年 9 月 24 日
最終変更日: 2009 年 3 月 15 日
*/

クラス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;

/*___|テキストを画像に変換 |___*/
  public function text2image ( $font_face="", $text="", $attributes=false, $width=0, $all=false )
  {
   $this->font_face = $font_face;
   $this->text = $text;
   $this->width = $width;
   $this->サイズ = 12;
   $this->color = "#000000";
   $this->角度 = 0;
   $this->line_height = 0;
   $this->setprop ( $attributes );
   
   if ( $this->width == 0 )
   {
    return $this->convert_text2image ( $this->text, $this->check_text_width( $this->text ) );
   } その他 {
    // ワードラップ
    if ( $all === false )
    {
     $text = split(" ", $this->text);
     $text = $this->word_wrap($this->text, $this->width, "
");
     $text = split("
", $text );
    } else if ( $all === true ) {
     $temp = array();
     for ( $i=0; $itext); $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"]);
      } その他 {
       $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) ?画像x($img[$k]) : $w;

if ($this->line_height == 0 ) $h += imagey($img[$k]);
     else $h += ($k 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 + imagey($img[$k]) : $locy + $this->line_height;
     }
     $base_img = $this->attachgdimage ( $img[$k], $base_img, array ("x"=>0, "y"=>$locy) );
    }
    $base_img を返す;
   }
  }
  プライベート関数 word_wrap( $str, $width, $break )
  {
   $formatted = '';
   $位置 = -1;
   $prev_position = 0;
   $last_line = -1;
   
   /// 文字列をループして各スペースで停止します
   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;
   }
   
   /// 改行なしで最後の行を追加します
   $formatted.= mb_substr( $str, $last_line + 1, mb_strlen( $str ), 'utf-8' );
   $formatted を返します。
  }


  パブリック関数 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 );
   $img を返します;
  }
  パブリック関数 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;
   
   $prop を返します;
  }


 /*___|画像ファイルに保存 |___*/
  public function save($gdimage, $filename, $attributes=false)
  {
   $this->type = "png";
   $this->chmod = 0777;
   $this->bg_color = "#ffffff";
   $this->品質 = 95;
   $this->アンチエイリアス = true;
   
   $this->setprop ( $attributes );
   
   // 処理
   switch ( strto lower ( $this->type ) )
   {
    ケース「jpeg」:
    ケース「jpg」:
     $gdimage = $this->createbackground($gdimage, 画像x($gdimage), 画像sy($gdimage));
     imagejpeg ( $gdimage, $filename, $this->quality );
     休憩;
    ケース「gif」:
     $gdimage = $this->createbackground($gdimage, 画像x($gdimage), 画像sy($gdimage));
     imagegif ( $gdimage, $filename );
     壊す;   
    ケース「png」:
    デフォルト:
     imagepng ( $gdimage, $filename );
     休憩;
   }
   chmod ( $filename, $this->chmod );
  }


 /*___| gd 背景画像を作成 |___*/
  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 );
   $img を返します;
  }


 /*___| gd 透明イメージを作成 |___*/
  public function createtransparent($width, $height)
  {
   $img = imagecreatetruecolor($width, $height);
   imagealphablending($img, false);
   画像保存アルファ($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);
   $img を返します;
  }


 /*___|画像をロード |___*/
  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 ); }
   }
   それ以外
   {
    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 ); }
   }
   false を返します;
  }
  private function createfromjpeg ( $filename ) { return imagecreatefromjpeg ( $filename ); }
  private function createfromgif ( $filename ) { return imagecreatefromgif ( $filename ); }
  プライベート関数 createfrompng ( $filename, $alpha=true )
  {
   if ( $alpha )
   {
    list ( $width, $height ) = getimagesize ( $filename );
    $png_img = imagecreatefrompng ( $filename );
    $img = imagecreatetruecolor ( $width, $height );
    imagealphablending ( $img, false );
    画像保存アルファ ( $img, true );
    imagecopyresampled ( $img, $png_img, 0, 0, 0, 0, $width, $height, $width, $height );
   } その他 {
    $img = imagecreatefrompng ( $filename );
   }
   $img を返します;
  }
 
 
 /*___|背景画像を添付 |___*/
  public functionattachbackgroundimage ( $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, imagex($gdimage), imagesy($gdimage), imagex($gdimage), imagesy($gdimage) ) ;
   $img を返します;
  }


 /*___|画像を添付 |___*/
  パブリック関数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 );
  }
  
 
 /*___| gd 画像リソースを添付 |___*/
  パブリック関数attachgdimage ( $gd_source, $gd_target, $attributes=false )
  {
   $this->x = 0;
   $this->y = 0;
   $this->width = 0;
   $this->高さ = 0;
   $this->setprop ( $attributes );
   
   imagealphablending($gd_target, true );
   imagealphablending($gd_source, true );
   imagecopy ( $gd_target, $gd_source, $this->x, $this->y, 0, 0, imagex($gd_source), imagesy($gd_source) );
   $gd_target を返す;
  }
 
 
 /*___| RGB カラーを取得 |___*/
  パブリック関数 getrgb($hex)
  {
   $rgb["red"] = hexdec ( substr ( $hex, 1, 2 ) ) ;
   $rgb["green"] = hexdec ( substr ( $hex, 3, 2 ) ) ;
   $rgb["blue"] = hexdec ( substr ( $hex, 5, 2 ) ) ;
   $rgb を返します;
  }
 
 
 /*___|プロパティを設定 |___*/
  プライベート関数 setprop ( $attributes=false )
  {
   if ( $attributes ) { foreach ( $attributes as $key => $value ) { $k = strtoupper ( $key ); $this->$k = $value; } }
  }
}

//调用方法

$imgresize = 新しい 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();

?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/633025.html技術記事 php 生成缩略图(文本转换成図形) これは一款办外开の经典的php 生成缩略图関数関数、文件灵活实用、任意の风格の图片を生成することができ、そして文を扱うことができます...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート