$icon_data = $icon->GD2ICOstring($gd_image_array);
header("Accept-Ranges: bytes");
header("Accept-Length: ".strlen($icon_data));
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=" .'favicon.ico');
echo $icon_data;
这个代码怎么改为自动上传到目录下面

解决方案 »

  1.   

    <?php
    $output = "";
    if($_FILES['upimage']!=''){
    if(isset($_FILES['upimage']['tmp_name']) && $_FILES['upimage']['tmp_name'] && is_uploaded_file($_FILES['upimage']['tmp_name'])){
    if($_FILES['upimage']['type']>512000){
    $typeinfo = "你上传的文件体积超过了限制 最大不能超过512K";
    }
    $fileext = array("image/pjpeg","image/jpeg","image/gif","image/x-png");
    if(!in_array($_FILES['upimage']['type'],$fileext)){
    $typeinfo =  "你上传的文件格式不正确 仅支持 jpg,gif,png";
    }
    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)){
    $typeinfo = "图形格式错误!无法处理这张图片.";
    }
    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]);
    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));
    }
    }$icon = new phpthumb_ico();
    $gd_image_array = array($resize_im);
    $icon_data = $icon->GD2ICOstring($gd_image_array);
    header("Accept-Ranges: bytes");
    header("Accept-Length: ".strlen($icon_data));
    header("Content-type: application/octet-stream");
    header("Content-Disposition: inline; filename=" .'favicon.ico');
    echo $icon_data;
    exit;
    }else{
    $typeinfo = "生成图标错误...这张图片或许已损坏.";
    }
    }
    }
    ?>
    <!DOCTYPE html>
    <html lang="zh-CN">
    <meta charset="utf-8">
    <title>Favicon 网站图标生成</title>
    <link rel="alternate" title="风吟" href="http://feeds.feedburner.com/feeds/rss" type="application/rss+xml" />
    <style type="text/css" media="all">
    html, body {margin: 0;padding: 0; }body {color: #333;font: 12px Tahoma,Lucida Grande, sans-serif;margin: 9%;}a {color: #0055CC; }img {border: 0px solid #CCC;}h1 {margin: 0;}h3 {color: #555;font-size: 1.6em;font-weight: normal;margin: 0; }pre {color: #0055CC;font-size: 1.1em;line-height: 1.2;margin: 0.25em 0; }p {margin: 0.65em 0;}#ads {border-left: 1px solid #eee;float: right;margin: 0 0 2em 2.5em;padding-left: 3px;width: 160px;}#source {margin-bottom: 2.5em; }pre {overflow: auto;padding:1em 0; }h2 {position: relative;top: 0.5em;}
    </style>
    <h3>Favicon 网站图标生成</h3>
    <?php if($typeinfo){echo $typeinfo;}?>
    <form  method="post" enctype='multipart/form-data'>
    选择图片:<input type="file" name="upimage" size="30"><br /> <br />支持格式:png,jpg,gif<br /><br />
    目标尺寸:
    <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><br /><br />
    <input type="submit" value="生成Favicon图标">
    </form>完整代码
    如何实现
    生成的'favicon.ico'直接传到指定目录里面