非法入侵 发表于 2017-4-2 10:40:43

纯PHP在线生成.ico文件

  <?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";                              // DWORDbiSize; $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";                              // DWORDbiCompression; $BitmapInfoHeader[$key] .= $this->LittleEndian2String($biSizeImage, 4);            // DWORDbiSizeImage; $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";                              // LONG   biXPelsPerMeter; $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";                              // LONG   biYPelsPerMeter; $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";                              // DWORDbiClrUsed; $BitmapInfoHeader[$key] .= "/x00/x00/x00/x00";                              // DWORDbiClrImportant; } $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; // 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,$imginfo);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><?PHPif($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]
查看完整版本: 纯PHP在线生成.ico文件