广

PHP编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    php在线生成ico文件的代码

    2018-10-28 11:05:39 次阅读 稿源:互联网
    零七广告
    index.php
    代码如下:

    <?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");
            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=/"".$filename."/" target=/"_blank/">点击下载</a>";
                }

            }else{
                echo "生成错误请重试!";
            }

        }    

    }
    ?>
    <html>
    <head>
    <title>ICO图标在线转换</title>
    <style>
    body{background-color:#fff;color:#000000;font-family:arial;margin:30px;font-size:12px;}
    table{border:0}
    td{line-height:16px;}
    label{cursor:hand;}
    </style>
    </head>
    <body>
    <h1>ICO图标在线转换</h1>
    <form action="?action=make" method="post" enctype='multipart/form-data'>
    <table>
        <tr>
            <td><b>请上传你要转换的图片</b><br>支持格式 png,jpg,gif</td>
        </tr>
        <tr>
            <td><input type="file" name="upimage" size="30"></td>
        </tr>
        <tr>
            <td>目标尺寸:
            <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 align="right"><input type="submit" value="生 成"></td>
        </tr>
        <?PHP
        if($output){
            echo "<tr><td><div style=/"border:1px solid #D8D8B2;background-color:#FFFFDD;padding:10px/">".$output."</div></td></tr>";
        }
        ?>
        <tr>
            <td><div style="color:#cccccc;font-size:11px;">Powered by <a href="http://veryim.com" style="color:#cccccc">非常爱漫</a> </div></td>
        </tr>
    </table>
    </form>
    </body>
    </html>

    phpthumb.ico.php
    代码如下:

    <?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));
        }

    }

    ?>

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告