当前位置:首页 > CMS教程 > 其它CMS > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-26 15:27:26 浏览: 评论:0 

本文给大家分享了2则php生成ICO图标的代码,第一款是基于YII框架实现的,第二款是纯php编写,都非常的不错,有需要的小伙伴可以参考下。

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

  1. class phpthumb_ico { 
  2.    
  3.   function phpthumb_ico() { 
  4.     return true; 
  5.   } 
  6.    
  7.    
  8.   function GD2ICOstring(&$gd_image_array) { 
  9.     foreach ($gd_image_array as $key => $gd_image) { 
  10.    
  11.       $ImageWidths[$key] = ImageSX($gd_image); 
  12.       $ImageHeights[$key] = ImageSY($gd_image); 
  13.       $bpp[$key]     = ImageIsTrueColor($gd_image) ? 32 : 24; 
  14.       $totalcolors[$key] = ImageColorsTotal($gd_image); 
  15.    
  16.       $icXOR[$key] = ''
  17.       for ($y = $ImageHeights[$key] - 1; $y >= 0; $y--) { 
  18.         for ($x = 0; $x < $ImageWidths[$key]; $x++) { 
  19.           $argb = $this->GetPixelColor($gd_image$x$y); 
  20.           $a = round(255 * ((127 - $argb['alpha']) / 127)); 
  21.           $r = $argb['red']; 
  22.           $g = $argb['green']; 
  23.           $b = $argb['blue']; 
  24.    
  25.           if ($bpp[$key] == 32) { 
  26.             $icXOR[$key] .= chr($b).chr($g).chr($r).chr($a); 
  27.           } elseif ($bpp[$key] == 24) { 
  28.             $icXOR[$key] .= chr($b).chr($g).chr($r); 
  29.           } 
  30.    
  31.           if ($a < 128) { 
  32.             @$icANDmask[$key][$y] .= '1'
  33.           } else { 
  34.             @$icANDmask[$key][$y] .= '0'
  35.           } 
  36.         } 
  37.         // mask bits are 32-bit aligned per scanline 
  38.         while (strlen($icANDmask[$key][$y]) % 32) { 
  39.           $icANDmask[$key][$y] .= '0'
  40.         } 
  41.       } 
  42.       $icAND[$key] = ''
  43.       foreach ($icANDmask[$keyas $y => $scanlinemaskbits) { 
  44.         for ($i = 0; $i < strlen($scanlinemaskbits); $i += 8) { 
  45.           $icAND[$key] .= chr(bindec(str_pad(substr($scanlinemaskbits$i, 8), 8, '0', STR_PAD_LEFT))); 
  46.         } 
  47.       } 
  48.    
  49.     } 
  50.    
  51.     foreach ($gd_image_array as $key => $gd_image) { 
  52.       $biSizeImage = $ImageWidths[$key] * $ImageHeights[$key] * ($bpp[$key] / 8); 
  53.    
  54.       // BITMAPINFOHEADER - 40 bytes 
  55.       $BitmapInfoHeader[$key] = ''
  56.       $BitmapInfoHeader[$key] .= "\x28\x00\x00\x00";               // DWORD biSize; 
  57.       $BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageWidths[$key], 4);   // LONG  biWidth; 
  58.       // The biHeight member specifies the combined 
  59.       // height of the XOR and AND masks. 
  60.       $BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageHeights[$key] * 2, 4); // LONG  biHeight; 
  61.       $BitmapInfoHeader[$key] .= "\x01\x00";                   // WORD  biPlanes; 
  62.         $BitmapInfoHeader[$key] .= chr($bpp[$key])."\x00";             // wBitCount; 
  63.       $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";               // DWORD biCompression; 
  64.       $BitmapInfoHeader[$key] .= $this->LittleEndian2String($biSizeImage, 4);      // DWORD biSizeImage; 
  65.       $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";               // LONG  biXPelsPerMeter; 
  66.       $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";               // LONG  biYPelsPerMeter; 
  67.       $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";               // DWORD biClrUsed; 
  68.       $BitmapInfoHeader[$key] .= "\x00\x00\x00\x00";               // DWORD biClrImportant; 
  69.     } 
  70.    
  71.    
  72.     $icondata = "\x00\x00";                   // idReserved;  // Reserved (must be 0) 
  73.     $icondata .= "\x01\x00";                   // idType;    // Resource Type (1 for icons) 
  74.     $icondata .= $this->LittleEndian2String(count($gd_image_array), 2); // idCount;   // How many images? 
  75.    
  76.     $dwImageOffset = 6 + (count($gd_image_array) * 16); 
  77.     foreach ($gd_image_array as $key => $gd_image) { 
  78.       // ICONDIRENTRY  idEntries[1]; // An entry for each image (idCount of 'em) 
  79.    
  80.       $icondata .= chr($ImageWidths[$key]);           // bWidth;     // Width, in pixels, of the image 
  81.       $icondata .= chr($ImageHeights[$key]);          // bHeight;     // Height, in pixels, of the image 
  82.       $icondata .= chr($totalcolors[$key]);           // bColorCount;   // Number of colors in image (0 if >=8bpp) 
  83.       $icondata .= "\x00";                   // bReserved;    // Reserved ( must be 0) 
  84.    
  85.       $icondata .= "\x01\x00";                 // wPlanes;     // Color Planes 
  86.       $icondata .= chr($bpp[$key])."\x00";           // wBitCount;    // Bits per pixel 
  87.    
  88.       $dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]); 
  89.       $icondata .= $this->LittleEndian2String($dwBytesInRes, 4);    // dwBytesInRes;  // How many bytes in this resource? 
  90.    
  91.       $icondata .= $this->LittleEndian2String($dwImageOffset, 4);   // dwImageOffset;  // Where in the file is this image? 
  92.       $dwImageOffset += strlen($BitmapInfoHeader[$key]); 
  93.       $dwImageOffset += strlen($icXOR[$key]); 
  94.       $dwImageOffset += strlen($icAND[$key]); 
  95.     } 
  96.    
  97.     foreach ($gd_image_array as $key => $gd_image) { 
  98.       $icondata .= $BitmapInfoHeader[$key]; 
  99.       $icondata .= $icXOR[$key]; 
  100.       $icondata .= $icAND[$key]; 
  101.     } 
  102.    
  103.     return $icondata
  104.   } 
  105.    
  106.   function LittleEndian2String($number$minbytes=1) { 
  107.     $intstring = ''
  108.     while ($number > 0) { 
  109.       $intstring = $intstring.chr($number & 255); 
  110.       $number >>= 8; 
  111.     } 
  112.     return str_pad($intstring$minbytes"\x00", STR_PAD_RIGHT); 
  113.   } 
  114.    
  115.   function GetPixelColor(&$img$x$y) { 
  116.     if (!is_resource($img)) { 
  117.       return false; 
  118.     } 
  119.     return @ImageColorsForIndex($img, @ImageColorAt($img$x$y)); 
  120.   } 
  121.    

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.    * icoMaker 在线生成ICO图标 
  3.    * @author flashalliance 
  4.    */ 
  5.   public function actionIco() { 
  6.     $this->breadcrumbs=array_merge($this->breadcrumbs,array
  7.         'ICO图标制作' 
  8.     )); 
  9.     $output = ""
  10.     $errors=array(); 
  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']['size']>204800){ 
  14.           $errors[]="你上传的文件过大,最大不能超过200K。"
  15.         } 
  16.         $fileext = array("image/pjpeg","image/jpeg","image/gif","image/x-png","image/png"); 
  17.         if(!in_array($_FILES['upimage']['type'],$fileext)){ 
  18.           $errors[]="你上传的文件格式不正确,仅支持 png, jpg, gif格式。"
  19.         } 
  20.         if($im = @imagecreatefrompng($_FILES['upimage']['tmp_name']) or $im = @imagecreatefromgif($_FILES['upimage']['tmp_name']) or $im = @imagecreatefromjpeg($_FILES['upimage']['tmp_name'])){ 
  21.           $imginfo = @getimagesize($_FILES['upimage']['tmp_name']); 
  22.           if(!is_array($imginfo)){ 
  23.             $errors[]="图像格式错误!"
  24.           } 
  25.           if(emptyempty($errors)){ 
  26.             switch($_POST['size']){ 
  27.               case 1; 
  28.               $resize_im = @imagecreatetruecolor(16,16); 
  29.               $size = 16; 
  30.               break
  31.               case 2; 
  32.               $resize_im = @imagecreatetruecolor(32,32); 
  33.               $size = 32; 
  34.               break
  35.               case 3; 
  36.               $resize_im = @imagecreatetruecolor(48,48); 
  37.               $size = 48; 
  38.               break
  39.               default
  40.               $resize_im = @imagecreatetruecolor(32,32); 
  41.               $size = 32; 
  42.               break
  43.             } 
  44.    
  45.             imagesavealpha($im, true); 
  46.             imagealphablending($resize_im, false);//不合并颜色,直接用$im图像颜色替换,包括透明色 
  47.             imagesavealpha($resize_im, true);//不要丢了$resize_im图像的透明色,解决生成黑色背景的问题 
  48.             imagecopyresampled($resize_im,$im,0,0,0,0,$size,$size,$imginfo[0],$imginfo[1]); 
  49.    
  50.             Yii::$enableIncludePath = false; 
  51.             Yii::import ( 'application.extensions.ico.phpthumb_ico', 1 ); 
  52.             $icon = new phpthumb_ico(); 
  53.             $gd_image_array = array($resize_im); 
  54.             $icon_data = $icon->GD2ICOstring($gd_image_array); 
  55.             $bas_path=dirname ( Yii::app ()->BasePath ); 
  56.             $bas_new_path=$bas_path.'/upload/ico/'
  57.             if(!is_dir($bas_new_path)){ 
  58.               mkdir($bas_new_path, 0777, true); 
  59.             } 
  60.             $filePath=$bas_new_pathdate("Ymdhis").uniqid(). rand(1,1000) . ".ico"
  61.             if(file_put_contents($filePath$icon_data)){ 
  62.               $output = str_replace($bas_path,'',$filePath); 
  63.             } 
  64.           } 
  65.         }else
  66.           $errors[]="生成错误请重试!"
  67.         } 
  68.       } 
  69.     } 
  70.     $this->render ( 'ico',array('output'=>$output,'errors'=>$errors)); 
  71.   } 

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(!emptyempty($errorsor !emptyempty($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(!emptyempty($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 (!emptyempty($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. <?php  
  2. //////////////////////////////////////////////////////////////  
  3. /// phpThumb() by James Heinrich <info@silisoftware.com>  //  
  4. //    available at http://phpthumb.sourceforge.net   ///  
  5. //////////////////////////////////////////////////////////////  
  6. ///                             //  
  7. // phpthumb.ico.php - .ICO output format functions     //  
  8. //                             ///  
  9. //////////////////////////////////////////////////////////////  
  10. class phpthumb_ico {  
  11.   function phpthumb_ico() {  
  12.     return true;  
  13.   }  
  14.   function GD2ICOstring(&$gd_image_array) {  
  15.     foreach ($gd_image_array as $key => $gd_image) {  
  16.       $ImageWidths[$key] = ImageSX($gd_image);  
  17.       $ImageHeights[$key] = ImageSY($gd_image);  
  18.       $bpp[$key]     = ImageIsTrueColor($gd_image) ? 32 : 24;  
  19.       $totalcolors[$key] = ImageColorsTotal($gd_image);  
  20.       $icXOR[$key] = '';  
  21.       for ($y = $ImageHeights[$key] - 1; $y >= 0; $y--) {  
  22.         for ($x = 0; $x < $ImageWidths[$key]; $x++) {  
  23.           $argb = $this->GetPixelColor($gd_image$x$y);  
  24.           $a = round(255 * ((127 - $argb['alpha']) / 127));  
  25.           $r = $argb['red'];  
  26.           $g = $argb['green'];  
  27.           $b = $argb['blue'];  
  28.           if ($bpp[$key] == 32) {  
  29.             $icXOR[$key] .= chr($b).chr($g).chr($r).chr($a);  
  30.           } elseif ($bpp[$key] == 24) {  
  31.             $icXOR[$key] .= chr($b).chr($g).chr($r);  
  32.           }  
  33.           if ($a < 128) {  
  34.             @$icANDmask[$key][$y] .= '1';  
  35.           } else {  
  36.             @$icANDmask[$key][$y] .= '0';  
  37.           }  
  38.         }  
  39.         // mask bits are 32-bit aligned per scanline  
  40.         while (strlen($icANDmask[$key][$y]) % 32) {  
  41.           $icANDmask[$key][$y] .= '0';  
  42.         }  
  43.       }  
  44.       $icAND[$key] = '';  
  45.       foreach ($icANDmask[$keyas $y => $scanlinemaskbits) {  
  46.         for ($i = 0; $i < strlen($scanlinemaskbits); $i += 8) {  
  47.           $icAND[$key] .= chr(bindec(str_pad(substr($scanlinemaskbits$i, 8), 8, '0', STR_PAD_LEFT)));  
  48.         }  
  49.       }  
  50.     }  
  51.     foreach ($gd_image_array as $key => $gd_image) {  
  52.       $biSizeImage = $ImageWidths[$key] * $ImageHeights[$key] * ($bpp[$key] / 8);  
  53.       // BITMAPINFOHEADER - 40 bytes  
  54.       $BitmapInfoHeader[$key] = '';  
  55.       $BitmapInfoHeader[$key] .= "/x28/x00/x00/x00";               // DWORD biSize;  
  56.       $BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageWidths[$key], 4);   // LONG  biWidth;  
  57.       // The biHeight member specifies the combined  
  58.       // height of the XOR and AND masks.  
  59.       $BitmapInfoHeader[$key] .= $this->LittleEndian2String($ImageHeights[$key] * 2, 4); // LONG  biHeight;  
  60.       $BitmapInfoHeader[$key] .= "/x01/x00";                   // WORD  biPlanes;  
  61.         $BitmapInfoHeader[$key] .= chr($bpp[$key])."/x00";             // wBitCount;  
  62.       $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // DWORD biCompression;  
  63.       $BitmapInfoHeader[$key] .= $this->LittleEndian2String($biSizeImage, 4);      // DWORD biSizeImage;  
  64.       $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // LONG  biXPelsPerMeter;  
  65.       $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // LONG  biYPelsPerMeter;  
  66.       $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // DWORD biClrUsed;  
  67.       $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";               // DWORD biClrImportant;  
  68.     }  
  69.     $icondata = "/x00/x00";                   // idReserved;  // Reserved (must be 0)  
  70.     $icondata .= "/x01/x00";                   // idType;    // Resource Type (1 for icons)  
  71.     $icondata .= $this->LittleEndian2String(count($gd_image_array), 2); // idCount;   // How many images?  
  72.     $dwImageOffset = 6 + (count($gd_image_array) * 16);  
  73.     foreach ($gd_image_array as $key => $gd_image) {  
  74.       // ICONDIRENTRY  idEntries[1]; // An entry for each image (idCount of 'em)  
  75.       $icondata .= chr($ImageWidths[$key]);           // bWidth;     // Width, in pixels, of the image  
  76.       $icondata .= chr($ImageHeights[$key]);          // bHeight;     // Height, in pixels, of the image  
  77.       $icondata .= chr($totalcolors[$key]);           // bColorCount;   // Number of colors in image (0 if >=8bpp)  
  78.       $icondata .= "/x00";                   // bReserved;    // Reserved ( must be 0)  
  79.       $icondata .= "/x01/x00";                 // wPlanes;     // Color Planes  
  80.       $icondata .= chr($bpp[$key])."/x00";           // wBitCount;    // Bits per pixel  
  81.       $dwBytesInRes = 40 + strlen($icXOR[$key]) + strlen($icAND[$key]);  
  82.       $icondata .= $this->LittleEndian2String($dwBytesInRes, 4);    // dwBytesInRes;  // How many bytes in this resource?  
  83.       $icondata .= $this->LittleEndian2String($dwImageOffset, 4);   // dwImageOffset;  // Where in the file is this image?  
  84.       $dwImageOffset += strlen($BitmapInfoHeader[$key]);  
  85.       $dwImageOffset += strlen($icXOR[$key]);  
  86.       $dwImageOffset += strlen($icAND[$key]);  
  87.     }  
  88.     foreach ($gd_image_array as $key => $gd_image) {  
  89.       $icondata .= $BitmapInfoHeader[$key];  
  90.       $icondata .= $icXOR[$key];  
  91.       $icondata .= $icAND[$key];  
  92.     }  
  93.     return $icondata;  
  94.   }  
  95.   function LittleEndian2String($number$minbytes=1) {  
  96.     $intstring = '';  
  97.     while ($number > 0) {  
  98.       $intstring = $intstring.chr($number & 255);  
  99.       $number >>= 8;  
  100.     }  
  101.     return str_pad($intstring$minbytes"/x00", STR_PAD_RIGHT);  
  102.   }  
  103.   function GetPixelColor(&$img$x$y) {  
  104.     if (!is_resource($img)) {  
  105.       return false;  
  106.     }  
  107.     return @ImageColorsForIndex($img, @ImageColorAt($img$x$y));  
  108.   }  
  109. }  
  110. ?> 

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. ?>  
  60.         <form action="index.php?action=make" method="post" enctype='multipart/form-data'>  
  61.         <table width="90%" align="center">  
  62.             <tr>  
  63.              <td height="40"><h3>请上传你要转换成.<a href="http://ico.sevem.cn" mce_href="http://ico.sevem.cn" target="_blank">ico</a>的图片</h3> 
  64.              支持格式 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>  
  65.             </tr>  
  66.             <tr>  
  67.              <td height="40"><input type="file" name="upimage" size="30">目标尺寸:  
  68.                 <input type="radio" name="size" value="1" id="s1"><label for="s1">16*16</label>  
  69.                 <input type="radio" name="size" value="2" id="s2" checked><label for="s2">32*32</label>  
  70.                 <input type="radio" name="size" value="3" id="s3"><label for="s3">48*48</label>  
  71.              </td>  
  72.             </tr>  
  73.                
  74.             <tr>  
  75.              <td height="40" align="center"><input type="submit" style="width:150px; height:30px;" value="在线生成favicon.ico图标"></td>  
  76.             </tr>  
  77.             <?PHP  
  78.             if($output){  
  79.                 echo "<tr><td><div style="/" mce_style="/""border:1px solid #D8D8B2;background-color:#FFFFDD;padding:10px/">".$output."</div></td></tr>";  
  80.             }  
  81.             ?>  
  82.         </table>  
  83.         <div style="display:none" mce_style="display:none"
  84. <?php  
  85.  $doc = new DOMDocument();  
  86.  $doc->load( 'http://link.qim.net.cn/xml.xml' );  
  87.     
  88.  $links = $doc->getElementsByTagName( "link" );  
  89.  foreach$links as $link )  
  90.  {  
  91.  $publishers = $link->getElementsByTagName( "homepage" );  
  92.  $homepage = $publishers->item(0)->nodeValue;  
  93.     
  94.  $titles = $link->getElementsByTagName( "title" );  
  95.  $title = $titles->item(0)->nodeValue;  
  96.     
  97.  $contents = $link->getElementsByTagName( "content" );  
  98.  $content = $contents->item(0)->nodeValue;  
  99.     
  100.  echo "<a href="$homepage" mce_href="$homepage" title='$content' target='_blank' ></a>$title</a><br>";  
  101.  }  
  102.  ?>  
  103. </div> 
  104.         </form>  
  105.               
  106. </body>  
  107. </html>

Tags: yii框架生成ICO图标

分享到: