设为首页 收藏本站
查看: 831|回复: 0

[经验分享] 纯PHP在线生成.ico文件

[复制链接]

尚未签到

发表于 2017-4-2 10:40:43 | 显示全部楼层 |阅读模式
  <?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)); } } ?>
  phpthumb.ico.php
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>  <title>ico图标</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>  <body>  <div class="center"><?PHP  $output = "";  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']['type']>210000){  echo "你上传的文件体积超过了限制 最大不能超过200K";  exit();  }  $fileext = array("image/pjpeg","image/gif","image/x-png","image/png","image/jpeg","image/jpg");  if(!in_array($_FILES['upimage']['type'],$fileext)){  echo "你上传的文件格式不正确 仅支持 jpg,gif,png";  exit();  }  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)){  echo "图形格式错误!";  }  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;  }  imagecopyresampled($resize_im,$im,0,0,0,0,$size,$size,$imginfo[0],$imginfo[1]);  include "phpthumb.ico.php";  $icon = new phpthumb_ico();  $gd_image_array = array($resize_im);  $icon_data = $icon->GD2ICOstring($gd_image_array);  $filename = "temp/".date("Ymdhis").rand(1,1000).".ico";  if(file_put_contents($filename, $icon_data)){  $output = "生成成功!请点右键->另存为 保存到本地<br><a href="/" mce_href="/""".$filename."/" target=/"_blank/">点击下载</a>";  }  }else{  echo "生成错误请重试!";  }  }      }  ?>  <form action="index.php?action=make" method="post" enctype='multipart/form-data'>  <table width="90%" align="center">  <tr>  <td height="40"><h3>请上传你要转换成.<a href="http://ico.sevem.cn" mce_href="http://ico.sevem.cn" target="_blank">ico</a>的图片</h3>支持格式 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>  </tr>  <tr>  <td height="40"><input type="file" name="upimage" size="30">目标尺寸:  <input type="radio" name="size" value="1" id="s1"><label for="s1">16*16</label>  <input type="radio" name="size" value="2" id="s2" checked><label for="s2">32*32</label>  <input type="radio" name="size" value="3" id="s3"><label for="s3">48*48</label>  </td>  </tr>  <tr>  <td height="40" align="center"><input type="submit" style="width:150px; height:30px;" value="在线生成favicon.ico图标"></td>  </tr>  <?PHP  if($output){  echo "<tr><td><div style="/" mce_style="/""border:1px solid #D8D8B2;background-color:#FFFFDD;padding:10px/">".$output."</div></td></tr>";  }  ?>  </table>  <div style="display:none" mce_style="display:none"><?php $doc = new DOMDocument(); $doc->load( 'http://link.qim.net.cn/xml.xml' ); $links = $doc->getElementsByTagName( "link" ); foreach( $links as $link ) { $publishers = $link->getElementsByTagName( "homepage" ); $homepage = $publishers->item(0)->nodeValue; $titles = $link->getElementsByTagName( "title" ); $title = $titles->item(0)->nodeValue; $contents = $link->getElementsByTagName( "content" ); $content = $contents->item(0)->nodeValue; echo "<a href="$homepage" mce_href="$homepage" title='$content' target='_blank' ></a>$title</a><br>"; } ?> </div></form> </body>  </html>
  index.php
  在index.php目录下需要存在temp目录.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-359016-1-1.html 上篇帖子: 基于PHP的cURL快速入门2 下篇帖子: 安装PHP常见错误解决error
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表