PHP基于yii框架实现生成ICO图标

时间:2022-11-18 15:43:46

1,phpthumb_ico 是生成ICO图标的类,源码如下

?
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
class phpthumb_ico {
 
  function phpthumb_ico() {
    return true;
  }
 
 
  function GD2ICOstring(&$gd_image_array) {
    foreach ($gd_image_array as $key => $gd_image) {
 
      $ImageWidths[$key] = ImageSX($gd_image);
      $ImageHeights[$key] = ImageSY($gd_image);
      $bpp[$key]     = ImageIsTrueColor($gd_image) ? 32 : 24;
      $totalcolors[$key] = ImageColorsTotal($gd_image);
 
      $icXOR[$key] = '';
      for ($y = $ImageHeights[$key] - 1; $y >= 0; $y--) {
        for ($x = 0; $x < $ImageWidths[$key]; $x++) {
          $argb = $this->GetPixelColor($gd_image, $x, $y);
          $a = round(255 * ((127 - $argb['alpha']) / 127));
          $r = $argb['red'];
          $g = $argb['green'];
          $b = $argb['blue'];
 
          if ($bpp[$key] == 32) {
            $icXOR[$key] .= chr($b).chr($g).chr($r).chr($a);
          } elseif ($bpp[$key] == 24) {
            $icXOR[$key] .= chr($b).chr($g).chr($r);
          }
 
          if ($a < 128) {
            @$icANDmask[$key][$y] .= '1';
          } else {
            @$icANDmask[$key][$y] .= '0';
          }
        }
        // mask bits are 32-bit aligned per scanline
        while (strlen($icANDmask[$key][$y]) % 32) {
          $icANDmask[$key][$y] .= '0';
        }
      }
      $icAND[$key] = '';
      foreach ($icANDmask[$key] as $y => $scanlinemaskbits) {
        for ($i = 0; $i < strlen($scanlinemaskbits); $i += 8) {
          $icAND[$key] .= chr(bindec(str_pad(substr($scanlinemaskbits, $i, 8), 8, '0', STR_PAD_LEFT)));
        }
      }
 
    }
 
    foreach ($gd_image_array as $key => $gd_image) {
      $biSizeImage = $ImageWidths[$key] * $ImageHeights[$key] * ($bpp[$key] / 8);
 
      // BITMAPINFOHEADER - 40 bytes
      $BitmapInfoHeader[$key] = '';
      $BitmapInfoHeader[$key] .= "(";               // DWORD biSize;
      $BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageWidths[$key], 4);   // LONG  biWidth;
      // The biHeight member specifies the combined
      // height of the XOR and AND masks.
      $BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageHeights[$key] * 2, 4); // LONG  biHeight;
      $BitmapInfoHeader[$key] .= "";                   // WORD  biPlanes;
        $BitmapInfoHeader[$key] .= chr($bpp[$key])."";             // wBitCount;
      $BitmapInfoHeader[$key] .= "";               // DWORD biCompression;
      $BitmapInfoHeader[$key] .= $this->LittleEndian2String($biSizeImage, 4);      // DWORD biSizeImage;
      $BitmapInfoHeader[$key] .= "";               // LONG  biXPelsPerMeter;
      $BitmapInfoHeader[$key] .= "";               // LONG  biYPelsPerMeter;
      $BitmapInfoHeader[$key] .= "";               // DWORD biClrUsed;
      $BitmapInfoHeader[$key] .= "";               // DWORD biClrImportant;
    }
 
 
    $icondata = "";                   // idReserved;  // Reserved (must be 0)
    $icondata .= "";                   // idType;    // Resource Type (1 for icons)
    $icondata .= $this->LittleEndian2String(count($gd_image_array), 2); // idCount;   // How many images?
 
    $dwImageOffset = 6 + (count($gd_image_array) * 16);
    foreach ($gd_image_array as $key => $gd_image) {
      // ICONDIRENTRY  idEntries[1]; // An entry for each image (idCount of 'em)
 
      $icondata .= chr($ImageWidths[$key]);           // bWidth;     // Width, in pixels, of the image
      $icondata .= chr($ImageHeights[$key]);          // bHeight;     // Height, in pixels, of the image
      $icondata .= chr($totalcolors[$key]);           // bColorCount;   // Number of colors in image (0 if >=8bpp)
      $icondata .= "";                   // bReserved;    // Reserved ( must be 0)
 
      $icondata .= "";                 // wPlanes;     // Color Planes
      $icondata .= chr($bpp[$key])."";           // wBitCount;    // Bits per pixel
 
      $dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]);
      $icondata .= $this->LittleEndian2String($dwBytesInRes, 4);    // dwBytesInRes;  // How many bytes in this resource?
 
      $icondata .= $this->LittleEndian2String($dwImageOffset, 4);   // dwImageOffset;  // Where in the file is this image?
      $dwImageOffset += strlen($BitmapInfoHeader[$key]);
      $dwImageOffset += strlen($icXOR[$key]);
      $dwImageOffset += strlen($icAND[$key]);
    }
 
    foreach ($gd_image_array as $key => $gd_image) {
      $icondata .= $BitmapInfoHeader[$key];
      $icondata .= $icXOR[$key];
      $icondata .= $icAND[$key];
    }
 
    return $icondata;
  }
 
  function LittleEndian2String($number, $minbytes=1) {
    $intstring = '';
    while ($number > 0) {
      $intstring = $intstring.chr($number & 255);
      $number >>= 8;
    }
    return str_pad($intstring, $minbytes, "", STR_PAD_RIGHT);
  }
 
  function GetPixelColor(&$img, $x, $y) {
    if (!is_resource($img)) {
      return false;
    }
    return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y));
  }
 
}

2,后台

引入类:

?
1
2
Yii::$enableIncludePath = false;
Yii::import ( 'application.extensions.ico.phpthumb_ico', 1 );

解决生成黑色背景的问题

imagealphablending($resize_im, false);//不合并颜色,直接用$im图像颜色替换,包括透明色
imagesavealpha($resize_im, true);//不要丢了$resize_im图像的透明色
完整方法:

?
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
71
/**
   * icoMaker 在线生成ICO图标
   * @author flashalliance
   */
  public function actionIco() {
    $this->breadcrumbs=array_merge($this->breadcrumbs,array(
        'ICO图标制作'
    ));
    $output = "";
    $errors=array();
    if(isset($_GET['action'])&&$_GET['action'] == 'make'){
      if(isset($_FILES['upimage']['tmp_name']) && $_FILES['upimage']['tmp_name'] && is_uploaded_file($_FILES['upimage']['tmp_name'])){
        if($_FILES['upimage']['size']>204800){
          $errors[]="你上传的文件过大,最大不能超过200K。";
        }
        $fileext = array("image/pjpeg","image/jpeg","image/gif","image/x-png","image/png");
        if(!in_array($_FILES['upimage']['type'],$fileext)){
          $errors[]="你上传的文件格式不正确,仅支持 png, jpg, gif格式。";
        }
        if($im = @imagecreatefrompng($_FILES['upimage']['tmp_name']) or $im = @imagecreatefromgif($_FILES['upimage']['tmp_name']) or $im = @imagecreatefromjpeg($_FILES['upimage']['tmp_name'])){
          $imginfo = @getimagesize($_FILES['upimage']['tmp_name']);
          if(!is_array($imginfo)){
            $errors[]="图像格式错误!";
          }
          if(empty($errors)){
            switch($_POST['size']){
              case 1;
              $resize_im = @imagecreatetruecolor(16,16);
              $size = 16;
              break;
              case 2;
              $resize_im = @imagecreatetruecolor(32,32);
              $size = 32;
              break;
              case 3;
              $resize_im = @imagecreatetruecolor(48,48);
              $size = 48;
              break;
              default;
              $resize_im = @imagecreatetruecolor(32,32);
              $size = 32;
              break;
            }
 
            imagesavealpha($im, true);
            imagealphablending($resize_im, false);//不合并颜色,直接用$im图像颜色替换,包括透明色
            imagesavealpha($resize_im, true);//不要丢了$resize_im图像的透明色,解决生成黑色背景的问题
            imagecopyresampled($resize_im,$im,0,0,0,0,$size,$size,$imginfo[0],$imginfo[1]);
 
            Yii::$enableIncludePath = false;
            Yii::import ( 'application.extensions.ico.phpthumb_ico', 1 );
            $icon = new phpthumb_ico();
            $gd_image_array = array($resize_im);
            $icon_data = $icon->GD2ICOstring($gd_image_array);
            $bas_path=dirname ( Yii::app ()->BasePath );
            $bas_new_path=$bas_path.'/upload/ico/';
            if(!is_dir($bas_new_path)){
              mkdir($bas_new_path, 0777, true);
            }
            $filePath=$bas_new_path. date("Ymdhis").uniqid(). rand(1,1000) . ".ico";
            if(file_put_contents($filePath, $icon_data)){
              $output = str_replace($bas_path,'',$filePath);
            }
          }
        }else{
          $errors[]="生成错误请重试!";
        }
      }
    }
    $this->render ( 'ico',array('output'=>$output,'errors'=>$errors));
  }

3,前台

  1. <div class="col-md-12"
  2.   <div class="form-horizontal panel panel-default margin-t-10 b-img"
  3.     <div class="panel-heading"
  4.       <div class="pull-left"><span class="g-bg glyphicon glyphicon-wrench margin-r-2" aria-hidden="true"></span>在线制作ICO图标</div> 
  5.       <div class="clearfix"></div> 
  6.     </div> 
  7. <?php 
  8. $form = $this->beginWidget ( 'CActiveForm', array ( 
  9.     'id' => 'ico-form'
  10.     'htmlOptions' => array ( 
  11.         'id' => 'view_table'
  12.         'class' => 'add-form padding-10'
  13.         'enctype'=>'multipart/form-data' 
  14.     ), 
  15.     'action'=>'/tool/ico?action=make'
  16.     'enableAjaxValidation' => false 
  17. ) ); 
  18. ?> 
  19.     <div class="form-group"
  20.         <label class="col-lg-2 control-label">上传文件</label> 
  21.         <div class="col-md-5"
  22.           <div class="col-md-6"
  23.             <input id="upimage" type="file" name="upimage" class="hidden"
  24.             <input id="tmp_file" class="form-control" type="text"
  25.           </div> 
  26.           <div class="col-md-6"><a class="btn btn-default" onclick="$('input[id=upimage]').click();">选择文件</a></div> 
  27.         </div> 
  28.     </div> 
  29.     <div class="form-group"
  30.         <label class="col-lg-2 text-right">选择尺寸</label> 
  31.         <div class="col-lg-5 btn-group" data-toggle="buttons"
  32.             <label class="btn btn-sm btn-default"
  33.              <input type="radio" name="size" id="s1" value="1" checked="checked"> 16*16 
  34.             </label> 
  35.             <label class="btn btn-sm btn-default"
  36.              <input type="radio" name="size" id="s2" value="2"> 32*32 
  37.             </label> 
  38.             <label class="btn btn-sm btn-default"
  39.              <input type="radio" name="size" id="s3" value="3"> 48*48 
  40.             </label> 
  41.         </div> 
  42.     </div> 
  43.     <div class="form-group"
  44.       <label class="col-lg-2 text-right">支持格式</label> 
  45.       <div class="col-lg-5"
  46.        png,jpg,gif 
  47.       </div> 
  48.     </div> 
  49.     <div class="list_back"
  50.       <input type="submit" value="生 成" class="btn btn-success"
  51.     </div> 
  52.   </div> 
  53. <?php $this->endWidget(); ?> 
  54. <?php if(!empty($errors) or !empty($output)):?> 
  55.   <div class="form-horizontal panel panel-default margin-t-10 b-img"
  56.     <div class="panel-heading margin-b-10"
  57.       <div class="pull-left"><span class="g-bg glyphicon glyphicon-wrench margin-r-2" aria-hidden="true"></span>生成结果</div> 
  58.       <div class="clearfix"></div> 
  59.     </div> 
  60.     <?php if(!empty($errors)):?> 
  61.     <div class="form-group"
  62.       <label class="col-lg-2 text-right">生成失败</label> 
  63.       <div class="col-lg-5"
  64.       <?php foreach ($errors as $e):?> 
  65.       <?php echo $e;?><br> 
  66.       <?php endforeach;?> 
  67.       </div> 
  68.     </div> 
  69.     <?php endif;?> 
  70.     <?PHP if (!empty($output)):?> 
  71.     <?php 
  72.     $form = $this->beginWidget ( 'CActiveForm', array ( 
  73.         'id' => 'ico-form'
  74.         'htmlOptions' => array ( 
  75.             'id' => 'view_table'
  76.             'class' => 'add-form padding-10'
  77.         ), 
  78.         'action'=>'/tool/icoDownload'
  79.         'enableAjaxValidation' => false 
  80.     ) ); 
  81.     ?> 
  82.     <?php echo CHtml::hiddenField('filePath',$output);?> 
  83.     <div class="form-group"
  84.       <label class="col-lg-2 text-right">成功生成</label> 
  85.       <div class="col-lg-5"
  86.         <img alt="在线制作ICO图标_favicon.ico" src="<?php echo $output;?>" class="margin-r-10"
  87.         <input type="submit" value="立即下载" class="btn btn-sm btn-success margin-l-10"
  88.       </div> 
  89.     </div> 
  90.     <?php $this->endWidget(); ?> 
  91.     <?php endif;?> 
  92.   </div> 
  93. <?php endif;?> 
  94. </div> 
  95. <!-- form --> 

再给大家分享一个独立的类

phpthumb.ico.php

?
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
//////////////////////////////////////////////////////////////
/// phpThumb() by James Heinrich <info@silisoftware.com>  //
//    available at http://phpthumb.sourceforge.net   ///
//////////////////////////////////////////////////////////////
///                             //
// phpthumb.ico.php - .ICO output format functions     //
//                             ///
//////////////////////////////////////////////////////////////
class phpthumb_ico {
  function phpthumb_ico() {
    return true;
  }
  function GD2ICOstring(&$gd_image_array) {
    foreach ($gd_image_array as $key => $gd_image) {
      $ImageWidths[$key] = ImageSX($gd_image);
      $ImageHeights[$key] = ImageSY($gd_image);
      $bpp[$key]     = ImageIsTrueColor($gd_image) ? 32 : 24;
      $totalcolors[$key] = ImageColorsTotal($gd_image);
      $icXOR[$key] = '';
      for ($y = $ImageHeights[$key] - 1; $y >= 0; $y--) {
        for ($x = 0; $x < $ImageWidths[$key]; $x++) {
          $argb = $this->GetPixelColor($gd_image, $x, $y);
          $a = round(255 * ((127 - $argb['alpha']) / 127));
          $r = $argb['red'];
          $g = $argb['green'];
          $b = $argb['blue'];
          if ($bpp[$key] == 32) {
            $icXOR[$key] .= chr($b).chr($g).chr($r).chr($a);
          } elseif ($bpp[$key] == 24) {
            $icXOR[$key] .= chr($b).chr($g).chr($r);
          }
          if ($a < 128) {
            @$icANDmask[$key][$y] .= '1';
          } else {
            @$icANDmask[$key][$y] .= '0';
          }
        }
        // mask bits are 32-bit aligned per scanline
        while (strlen($icANDmask[$key][$y]) % 32) {
          $icANDmask[$key][$y] .= '0';
        }
      }
      $icAND[$key] = '';
      foreach ($icANDmask[$key] as $y => $scanlinemaskbits) {
        for ($i = 0; $i < strlen($scanlinemaskbits); $i += 8) {
          $icAND[$key] .= chr(bindec(str_pad(substr($scanlinemaskbits, $i, 8), 8, '0', STR_PAD_LEFT)));
        }
      }
    }
    foreach ($gd_image_array as $key => $gd_image) {
      $biSizeImage = $ImageWidths[$key] * $ImageHeights[$key] * ($bpp[$key] / 8);
      // BITMAPINFOHEADER - 40 bytes
      $BitmapInfoHeader[$key] = '';
      $BitmapInfoHeader[$key] .= "/x28/x00/x00/x00";               // DWORD biSize;
      $BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageWidths[$key], 4);   // LONG  biWidth;
      // The biHeight member specifies the combined
      // height of the XOR and AND masks.
      $BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageHeights[$key] * 2, 4); // LONG  biHeight;
      $BitmapInfoHeader[$key] .= "/x01/x00";                   // WORD  biPlanes;
        $BitmapInfoHeader[$key] .= chr($bpp[$key])."/x00";             // wBitCount;
      $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // DWORD biCompression;
      $BitmapInfoHeader[$key] .= $this->LittleEndian2String($biSizeImage, 4);      // DWORD biSizeImage;
      $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // LONG  biXPelsPerMeter;
      $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // LONG  biYPelsPerMeter;
      $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // DWORD biClrUsed;
      $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // DWORD biClrImportant;
    }
    $icondata = "/x00/x00";                   // idReserved;  // Reserved (must be 0)
    $icondata .= "/x01/x00";                   // idType;    // Resource Type (1 for icons)
    $icondata .= $this->LittleEndian2String(count($gd_image_array), 2); // idCount;   // How many images?
    $dwImageOffset = 6 + (count($gd_image_array) * 16);
    foreach ($gd_image_array as $key => $gd_image) {
      // ICONDIRENTRY  idEntries[1]; // An entry for each image (idCount of 'em)
      $icondata .= chr($ImageWidths[$key]);           // bWidth;     // Width, in pixels, of the image
      $icondata .= chr($ImageHeights[$key]);          // bHeight;     // Height, in pixels, of the image
      $icondata .= chr($totalcolors[$key]);           // bColorCount;   // Number of colors in image (0 if >=8bpp)
      $icondata .= "/x00";                   // bReserved;    // Reserved ( must be 0)
      $icondata .= "/x01/x00";                 // wPlanes;     // Color Planes
      $icondata .= chr($bpp[$key])."/x00";           // wBitCount;    // Bits per pixel
      $dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]);
      $icondata .= $this->LittleEndian2String($dwBytesInRes, 4);    // dwBytesInRes;  // How many bytes in this resource?
      $icondata .= $this->LittleEndian2String($dwImageOffset, 4);   // dwImageOffset;  // Where in the file is this image?
      $dwImageOffset += strlen($BitmapInfoHeader[$key]);
      $dwImageOffset += strlen($icXOR[$key]);
      $dwImageOffset += strlen($icAND[$key]);
    }
    foreach ($gd_image_array as $key => $gd_image) {
      $icondata .= $BitmapInfoHeader[$key];
      $icondata .= $icXOR[$key];
      $icondata .= $icAND[$key];
    }
    return $icondata;
  }
  function LittleEndian2String($number, $minbytes=1) {
    $intstring = '';
    while ($number > 0) {
      $intstring = $intstring.chr($number & 255);
      $number >>= 8;
    }
    return str_pad($intstring, $minbytes, "/x00", STR_PAD_RIGHT);
  }
  function GetPixelColor(&$img, $x, $y) {
    if (!is_resource($img)) {
      return false;
    }
    return @ImageColorsForIndex($img, @ImageColorAt($img, $x, $y));
  }
}
?>

 index.php

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
  2. <html xmlns="http://www.w3.org/1999/xhtml"
  3. <head> 
  4. <title>ico图标</title> 
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  6. </head> 
  7. <body> 
  8.  <div class="center"
  9.         <?PHP 
  10. $output = ""
  11. if(isset($_GET['action'])&&$_GET['action'] == 'make'){ 
  12.   if(isset($_FILES['upimage']['tmp_name']) && $_FILES['upimage']['tmp_name'] && is_uploaded_file($_FILES['upimage']['tmp_name'])){ 
  13.     if($_FILES['upimage']['type']>210000){ 
  14.       echo "你上传的文件体积超过了限制 最大不能超过200K"
  15.       exit(); 
  16.     } 
  17.     $fileext = array("image/pjpeg","image/gif","image/x-png","image/png","image/jpeg","image/jpg"); 
  18.     if(!in_array($_FILES['upimage']['type'],$fileext)){ 
  19.       echo "你上传的文件格式不正确 仅支持 jpg,gif,png"
  20.       exit(); 
  21.     } 
  22.     if($im = @imagecreatefrompng($_FILES['upimage']['tmp_name']) or $im = @imagecreatefromgif($_FILES['upimage']['tmp_name']) or $im = @imagecreatefromjpeg($_FILES['upimage']['tmp_name'])){ 
  23.       $imginfo = @getimagesize($_FILES['upimage']['tmp_name']); 
  24.       if(!is_array($imginfo)){ 
  25.         echo "图形格式错误!"
  26.       } 
  27.       switch($_POST['size']){ 
  28.         case 1; 
  29.           $resize_im = @imagecreatetruecolor(16,16); 
  30.           $size = 16; 
  31.           break
  32.         case 2; 
  33.           $resize_im = @imagecreatetruecolor(32,32); 
  34.           $size = 32; 
  35.           break
  36.         case 3; 
  37.           $resize_im = @imagecreatetruecolor(48,48); 
  38.           $size = 48; 
  39.           break
  40.         default
  41.           $resize_im = @imagecreatetruecolor(32,32); 
  42.           $size = 32; 
  43.           break
  44.       } 
  45.       imagecopyresampled($resize_im,$im,0,0,0,0,$size,$size,$imginfo[0],$imginfo[1]); 
  46.       include "phpthumb.ico.php"
  47.       $icon = new phpthumb_ico(); 
  48.       $gd_image_array = array($resize_im); 
  49.       $icon_data = $icon->GD2ICOstring($gd_image_array); 
  50.       $filename = "temp/".date("Ymdhis").rand(1,1000).".ico"
  51.       if(file_put_contents($filename, $icon_data)){ 
  52.         $output = "生成成功!请点右键->另存为 保存到本地<br><a href="/" mce_href="/""".$filename."/" target=/"_blank/">点击下载</a>"
  53.       } 
  54.     }else
  55.       echo "生成错误请重试!"
  56.     } 
  57.   }   
  58. ?> 
  59.         <form action="index.php?action=make" method="post" enctype='multipart/form-data'
  60.         <table width="90%" align="center"
  61.             <tr> 
  62.              <td height="40"><h3>请上传你要转换成.<a href="http://ico.sevem.cn" mce_href="http://ico.sevem.cn" target="_blank">ico</a>的图片</h3> 
  63.              支持格式 png、jpg、gif在线转换成.<a href="http://ico.sevem.cn" mce_href="http://ico.sevem.cn" target="_blank">ico</a>图标。如何你想制作更丰富的.<a href="http://ico.sevem.cn" mce_href="http://ico.sevem.cn" target="_blank">ico</a>图标请<a href="#ico" mce_href="#ico">下载ICO制作软件</a></td> 
  64.             </tr> 
  65.             <tr> 
  66.              <td height="40"><input type="file" name="upimage" size="30">目标尺寸: 
  67.                 <input type="radio" name="size" value="1" id="s1"><label for="s1">16*16</label> 
  68.                 <input type="radio" name="size" value="2" id="s2" checked><label for="s2">32*32</label> 
  69.                 <input type="radio" name="size" value="3" id="s3"><label for="s3">48*48</label> 
  70.              </td> 
  71.             </tr> 
  72.               
  73.             <tr> 
  74.              <td height="40" align="center"><input type="submit" style="width:150px; height:30px;" value="在线生成favicon.ico图标"></td> 
  75.             </tr> 
  76.             <?PHP 
  77.             if($output){ 
  78.                 echo "<tr><td><div style="/" mce_style="/""border:1px solid #D8D8B2;background-color:#FFFFDD;padding:10px/">".$output."</div></td></tr>"
  79.             } 
  80.             ?> 
  81.         </table> 
  82.         <div style="display:none" mce_style="display:none"
  83. <?php 
  84.  $doc = new DOMDocument(); 
  85.  $doc->load( 'http://link.qim.net.cn/xml.xml' ); 
  86.    
  87.  $links = $doc->getElementsByTagName( "link" ); 
  88.  foreach( $links as $link ) 
  89.  { 
  90.  $publishers = $link->getElementsByTagName( "homepage" ); 
  91.  $homepage = $publishers->item(0)->nodeValue; 
  92.    
  93.  $titles = $link->getElementsByTagName( "title" ); 
  94.  $title = $titles->item(0)->nodeValue; 
  95.    
  96.  $contents = $link->getElementsByTagName( "content" ); 
  97.  $content = $contents->item(0)->nodeValue; 
  98.    
  99.  echo "<a href="$homepage" mce_href="$homepage" title='$content' target='_blank' ></a>$title</a><br>"
  100.  } 
  101.  ?> 
  102. </div> 
  103.         </form> 
  104.              
  105. </body> 
  106. </html>