写了个处理照片的 PHP 程序

  最近工作日上班,晚上还要做饭,周末抓紧时间游历湾区,所以少有时间写技术话题,今天来写一个:)

  在 Blog 上贴图的时候比较喜欢处理成自己喜欢的风格,但是手工做起来比较麻烦,也不去找什么工具软件啦,晚上自己用 PHP 写了一个,看代码:

  1.  $file   = 'test.jpg'// 需要进行处理的照片
  2.  $string = 'Night';     // 写在照片下方的文字
  3.  $font   = 'C:/Windows/Fonts/verdana.ttf'// 文字使用的字体
  4.  
  5.  $img    = imagecreatefromjpeg( $file );
  6.  $width  = imagesx( $img );
  7.  $height = imagesy( $img );
  8.  
  9.  if( $width > $height )
  10.  {
  11.      $new_width = 500// 宽度大于高度时,新的宽度值
  12.      $new_height = ( $height / $width ) * $new_width;
  13.  }
  14.  else
  15.  {
  16.      $new_height = 500// 高度大于宽度时,新的高度值
  17.      $new_width = ( $width / $height ) * $new_height;
  18.  }
  19.  
  20.  $new_img = imagecreatetruecolor( $new_width, $new_height );
  21.  
  22.  imagecopyresampled( $new_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height )// 缩放
  23.  
  24.  //
  25.  // 画透明白边
  26.  //
  27.  $white = imagecolorallocatealpha( $new_img, 255, 255, 255, 55 );
  28.  imagefilledrectangle( $new_img, 0, 0, $new_width - 1, 9, $white );      // up
  29.  imagefilledrectangle( $new_img, 0, 10, 10, $new_height - 30, $white )// left
  30.  imagefilledrectangle( $new_img, $new_width - 10, 10, $new_width - 1, $new_height - 30, $white ); //right
  31.  imagefilledrectangle( $new_img, 0, $new_height - 29, $new_width - 1, $new_height - 1, $white )// bottom
  32.  
  33.  $fs = imagettfbbox( 18, 0, $font, $string );
  34.  $fs_width = $fs[4] - $fs[6];
  35.  $fs_height = $fs[3] - $fs[5];
  36.  
  37.  // 在最下面写字
  38.  $blue = imagecolorallocatealpha( $new_img, 0, 0, 255, 55 );
  39.  imagettftext( $new_img, 18, 0, ( $new_width - $fs_width ) / 2, ( $new_height - 29 ) + ( ( 30 - $fs_height ) / 2 ) + 18, $blue, $font, $string );
  40.  
  41.  imagejpeg( $new_img, 'new_test.jpg' );
  42.  ?>

  简单的说,这个程序可以把数码相机拍的任意大小的照片缩放到长边 500px,在四周加一个半透明白框,最后在下面居中用 verdana 标注文本。这里贴的是核心代码,加些外围代码用起来会更方便些:D

  最后贴一张今晚站在阳台上拍的夜景,用上面贴的程序处理过:
Night

Leave a Reply