当前位置: 首页>>代码示例>>PHP>>正文


PHP ImageFontWidth函数代码示例

本文整理汇总了PHP中ImageFontWidth函数的典型用法代码示例。如果您正苦于以下问题:PHP ImageFontWidth函数的具体用法?PHP ImageFontWidth怎么用?PHP ImageFontWidth使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了ImageFontWidth函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: gd_button

 function gd_button()
 {
     if (file_exists($this->save_dir . $this->filename)) {
         return $this->filename;
     }
     $this->font_size = 5;
     $text_width = ImageFontWidth($this->font_size) * strlen($this->font_text);
     $text_height = ImageFontHeight($this->font_size);
     $this->width = $this->xspace * 2 + $text_width;
     $this->height = $this->yspace + $text_height;
     $this->xpos = $this->width / 2 - $text_width / 2;
     if ($this->xpos < 0) {
         $this->xpos = $this->xspace;
     }
     $this->ypos = $this->height / 2 - $text_height / 2;
     if ($this->ypos < 0) {
         $this->ypos = $this->yspace;
     }
     $this->button_init();
     $black = ImageColorAllocate($this->image, 0, 0, 0);
     ImageRectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $black);
     $white = ImageColorAllocate($this->image, 255, 255, 255);
     ImageRectangle($this->image, 0, 0, $this->width, $this->height, $white);
     ImageString($this->image, $this->font_size, intval($this->xpos + 1), intval($this->ypos), $this->font_text, $black);
     ImageString($this->image, $this->font_size, intval($this->xpos), intval($this->ypos - 1), $this->font_text, $white);
     return $this->save_button();
 }
开发者ID:HaakonME,项目名称:porticoestate,代码行数:27,代码来源:class.gdbutton.inc.php

示例2: ConvertToImage

function ConvertToImage($content)
{
    $imageFile = ".counter.png";
    $relativePath = ".counter.png";
    $noOfChars = strlen($content);
    $charHeight = ImageFontHeight(5);
    $charWidth = ImageFontWidth(5);
    $strWidth = $charWidth * $noOfChars;
    $strHeight = $charHeight;
    //15 padding
    $imgWidth = $strWidth + 15;
    $imgHeight = $strHeight + 15;
    $imgCenterX = $imgWidth / 2;
    $imgCenterY = $imgHeight / 2;
    $im = ImageCreate($imgWidth, $imgHeight);
    $script = ImageColorAllocate($im, 0, 255, 0);
    $outercolor = ImageColorAllocate($im, 99, 140, 214);
    $innercolor = ImageColorAllocate($im, 0, 0, 0);
    ImageFilledRectangle($im, 0, 0, $imgWidth, $imgHeight, $outercolor);
    ImageFilledRectangle($im, 3, 3, $imgWidth - 4, $imgHeight - 4, $innercolor);
    //draw string
    $drawPosX = $imgCenterX - $strWidth / 2 + 1;
    $drawPosY = $imgCenterY - $strHeight / 2;
    ImageString($im, 5, $drawPosX, $drawPosY, $content, $script);
    //save image and return
    ImagePNG($im, $imageFile);
    return $relativePath;
}
开发者ID:sahil2441,项目名称:Prolog-Problems,代码行数:28,代码来源:counter.php

示例3: generateImage

 function generateImage($token)
 {
     $iFont = 5;
     // Font ID
     $iSpacing = 2;
     // Spacing between characters
     $iDisplacement = 5;
     // Vertical chracter displacement
     // Establish font metric and image size
     $iCharWidth = ImageFontWidth($iFont);
     $iCharHeight = ImageFontHeight($iFont);
     $iWidth = strlen($token) * ($iCharWidth + $iSpacing);
     $iHeight = $iCharHeight + 2 * $iDisplacement;
     // Create the image
     $pic = ImageCreate($iWidth, $iHeight);
     // Allocate a background and foreground colour
     $col = array('white' => ImageColorAllocate($pic, 255, 255, 255), 'blue' => ImageColorAllocate($pic, 45, 45, 100), 'green' => ImageColorAllocate($pic, 45, 100, 45), 'red' => ImageColorAllocate($pic, 100, 45, 45), 'purple' => ImageColorAllocate($pic, 100, 45, 100), 'grey' => ImageColorAllocate($pic, 225, 225, 225), 'grey2' => ImageColorAllocate($pic, 200, 200, 200));
     for ($x = 0; $x < $iWidth; $x += 2) {
         for ($y = 0; $y < $iHeight; $y += 2) {
             ImageSetPixel($pic, $x, $y, $col['grey']);
         }
     }
     $iX = 1;
     for ($i = 0; $i < strlen($token); $i++) {
         ImageChar($pic, $iFont - 1, $iX, $iDisplacement - rand(-$iDisplacement, $iDisplacement), $token[$i], $col['grey2']);
         $iX += $iCharWidth + $iSpacing;
     }
     $iX = 2;
     $c = array('blue', 'green', 'red', 'purple');
     for ($i = 0; $i < strlen($token); $i++) {
         $colour = $c[rand(0, count($c) - 1)];
         ImageChar($pic, $iFont, $iX, $iDisplacement - rand(-$iDisplacement, $iDisplacement), $token[$i], $col[$colour]);
         $iX += $iCharWidth + $iSpacing;
     }
     for ($x = 1; $x < $iWidth; $x += 4) {
         for ($y = 1; $y < $iHeight; $y += 4) {
             ImageSetPixel($pic, $x, $y, $col['white']);
         }
     }
     // Draw some lines
     for ($i = 0; $i < 4; $i++) {
         ImageLine($pic, rand(0, $iWidth / 2), rand(0, $iHeight / 2), rand($iWidth / 2, $iWidth), rand($iHeight / 2, $iHeight), $col['white']);
     }
     ob_start();
     if (function_exists('imagejpeg')) {
         ImageJPEG($pic);
     } elseif (function_exists('imagepng')) {
         ImagePNG($pic);
     } else {
         ob_end_clean();
         return false;
     }
     $data = ob_get_contents();
     ob_end_clean();
     ImageDestroy($pic);
     return $data;
 }
开发者ID:vojtajina,项目名称:sitellite,代码行数:57,代码来源:Turing.php

示例4: image_create

function image_create($image, $size, $x, $y, $text, $color, $maxwidth)
{
    $fontwidth = ImageFontWidth($size);
    $fontheight = ImageFontHeight($size);
    if ($maxwidth != NULL) {
        $maxchar = floor($maxwidth / $fontwidth);
        $text = wordwrap($text, $maxchar, "\n", 1);
    }
    $lines = explode("\n", $text);
    while (list($numl, $line) = each($lines)) {
        ImageString($image, $size, $x, $y, $line, $color);
        $y += $fontheight;
    }
}
开发者ID:planktonicme,项目名称:phproxyimproved,代码行数:14,代码来源:image.php

示例5: render_png

 function render_png($string, $hash)
 {
     $font = 4;
     $width = ImageFontWidth($font) * strlen($string);
     $height = ImageFontHeight($font);
     $im = @imagecreate($width, $height);
     $background_color = imagecolorallocate($im, 255, 255, 255);
     //white background
     $text_color = imagecolorallocate($im, 0, 0, 0);
     //black text
     imagecolortransparent($im, $background_color);
     imagestring($im, $font, 0, 0, $string, $text_color);
     $pngdata = imagepng($im, $this->CACHE_DIR . "/{$hash}.png");
     chdir($current_dir);
 }
开发者ID:ksb1712,项目名称:pragyan,代码行数:15,代码来源:pngRender.class.php

示例6: fatal_error

function fatal_error($message)
{
    // send an image
    if (function_exists('ImageCreate')) {
        $width = ImageFontWidth(5) * strlen($message) + 10;
        $height = ImageFontHeight(5) + 10;
        if ($image = ImageCreate($width, $height)) {
            $background = ImageColorAllocate($image, 255, 255, 255);
            $text_color = ImageColorAllocate($image, 0, 0, 0);
            ImageString($image, 5, 5, 5, $message, $text_color);
            header('Content-type: image/png');
            ImagePNG($image);
            ImageDestroy($image);
            exit;
        }
    }
    // send 500 code
    header("HTTP/1.0 500 Internal Server Error");
    print $message;
    exit;
}
开发者ID:Newsoft-Computer,项目名称:CLI0005-IVAO-Colombia,代码行数:21,代码来源:weatherstatus.php

示例7: ts_gfx

function ts_gfx($ts_random)
{
    global $site_key;
    $datekey = date("F j");
    $rcode = hexdec(md5($_SERVER[HTTP_USER_AGENT] . $sitekey . $ts_random . $datekey));
    $code = substr($rcode, 2, 6);
    $circles = 5;
    $lines = 1;
    $width = 100;
    $height = 40;
    $font = 5;
    $fontwidth = ImageFontWidth($font) * strlen($string);
    $fontheight = ImageFontHeight($font);
    $im = @imagecreate($width, $height);
    $background_color = imagecolorallocate($im, 255, 138, 0);
    $text_color = imagecolorallocate($im, rand(200, 255), rand(200, 255), rand(200, 255));
    // Random Text
    #rgb(1%, 51%, 87%)
    $r = 0.87;
    $g = 0.51;
    $b = 0.0;
    for ($i = 1; $i <= $circles; $i++) {
        $value = rand(200, 255);
        $randomcolor = imagecolorallocate($im, $value * $r, $value * $g, $value * $b);
        imagefilledellipse($im, rand(0, $width - 20), rand(0, $height - 6), rand(15, 70), rand(15, 70), $randomcolor);
    }
    imagerectangle($im, 0, 0, $width - 1, $height - 1, $text_color);
    imagestring($im, $font, 22, 12, $code, $text_color);
    for ($i = 0; $i < $lines; $i++) {
        $y1 = rand(14, 23);
        $y2 = rand(15, 24);
        $randomcolor = imagecolorallocate($im, rand(100, 255), 0, rand(100, 255));
        imageline($im, 0, $y1, $width, $y2, $randomcolor);
    }
    header("Content-type: image/jpeg");
    imagejpeg($im, '', 85);
    ImageDestroy($im);
    die;
}
开发者ID:holsinger,项目名称:openfloor,代码行数:39,代码来源:ts.php

示例8: createImage

function createImage($text, $width, $height, $font = 5)
{
    global $fontColor, $bgColor, $lineColor;
    if ($img = @ImageCreate($width, $height)) {
        list($R, $G, $B) = convertRGB($fontColor);
        $fontColor = ImageColorAllocate($img, $R, $G, $B);
        list($R, $G, $B) = convertRGB($bgColor);
        $bgColor = ImageColorAllocate($img, $R, $G, $B);
        list($R, $G, $B) = convertRGB($lineColor);
        $lineColor = ImageColorAllocate($img, $R, $G, $B);
        ImageFill($img, 0, 0, $bgColor);
        for ($i = 0; $i <= $width; $i += 5) {
            @ImageLine($img, $i, 0, $i, $height, $lineColor);
        }
        for ($i = 0; $i <= $height; $i += 5) {
            @ImageLine($img, 0, $i, $width, $i, $lineColor);
        }
        $hcenter = $width / 2;
        $vcenter = $height / 2;
        $x = round($hcenter - ImageFontWidth($font) * strlen($text) / 2);
        $y = round($vcenter - ImageFontHeight($font) / 2);
        ImageString($img, $font, $x, $y, $text, $fontColor);
        if (function_exists('ImagePNG')) {
            header('Content-Type: image/png');
            @ImagePNG($img);
        } else {
            if (function_exists('ImageGIF')) {
                header('Content-Type: image/gif');
                @ImageGIF($img);
            } else {
                if (function_exists('ImageJPEG')) {
                    header('Content-Type: image/jpeg');
                    @ImageJPEG($img);
                }
            }
        }
        ImageDestroy($img);
    }
}
开发者ID:ghahremany,项目名称:creat-TAG,代码行数:39,代码来源:image.php

示例9: print_image

 function print_image($text)
 {
     $w = 50;
     $image = imagecreate($w, 25);
     $light = ImageColorAllocate($image, 255, 255, 0);
     $dark = ImageColorAllocate($image, 0, 0, 0);
     $gray = ImageColorAllocate($image, 0, 0, 0);
     ImageFill($image, 0, 0, $light);
     $width_two = ImageFontWidth(5) * strlen($text);
     $height = ImageFontHeight(100);
     $width = ($w - $width_two) / 2;
     # vertical lines
     for ($x = 0; $x <= 100; $x += 10) {
         ImageLine($image, $x, 0, $x, 100, $dark);
     }
     # horizontal lines
     for ($x = 0; $x <= 100; $x += 10) {
         ImageLine($image, 0, $x, 100, $x, $dark);
     }
     ImageString($image, 5, $width, 4, $text, $dark);
     ImagePNG($image, '', 80);
     ImageDestroy($image);
 }
开发者ID:BackupTheBerlios,项目名称:yac-svn,代码行数:23,代码来源:images_class.php

示例10: SetFontGD

 function SetFontGD($which_elem, $which_font, $which_spacing = NULL)
 {
     if ($which_font < 1 || 5 < $which_font) {
         return $this->PrintError(__FUNCTION__ . ': Font size must be 1, 2, 3, 4 or 5');
     }
     if (!$this->CheckOption($which_elem, 'generic, title, legend, x_label, y_label, x_title, y_title', __FUNCTION__)) {
         return FALSE;
     }
     # Store the font parameters: name/size, char cell height and width.
     $this->fonts[$which_elem] = array('ttf' => FALSE, 'font' => $which_font, 'height' => ImageFontHeight($which_font), 'width' => ImageFontWidth($which_font), 'line_spacing' => $which_spacing);
     return TRUE;
 }
开发者ID:BackupTheBerlios,项目名称:oos-svn,代码行数:12,代码来源:phplot.php

示例11: WatermarkText


//.........这里部分代码省略.........
                 //$text_height = round($max_y - $min_y + ($size * 0.5));
                 $text_height_line = round($max_y_line - $min_y_line);
                 switch ($alignment) {
                     // $text_origin_y set above, just re-set $text_origin_x here as needed
                     case 'L':
                     case 'TL':
                     case 'BL':
                         // no change neccesary
                         break;
                     case 'C':
                     case 'T':
                     case 'B':
                         $text_origin_x = $originOffsetX ? $originOffsetX - round($text_width_line / 2) : round((ImageSX($gdimg) - $text_width_line) / 2);
                         break;
                     case 'R':
                     case 'TR':
                     case 'BR':
                         $text_origin_x = $originOffsetX ? $originOffsetX - $text_width_line : ImageSX($gdimg) - $text_width_line + $TTFbox[0] - $min_x + round($size * 0.25) - $margin;
                         break;
                 }
                 //ImageTTFtext($gdimg, $size, $angle, $text_origin_x, $text_origin_y, $letter_color_text, $ttffont, $text);
                 $this->DebugMessage('WatermarkText() calling ImageTTFtext($gdimg, ' . $size . ', ' . $angle . ', ' . $text_origin_x . ', ' . ($text_origin_y + $y_offset) . ', $letter_color_text, ' . $ttffont . ', ' . $line . ')', __FILE__, __LINE__);
                 ImageTTFtext($gdimg, $size, $angle, $text_origin_x, $text_origin_y + $y_offset, $letter_color_text, $ttffont, $line);
                 $y_offset += $char_height;
             }
         }
         return true;
     } else {
         $size = min(5, max(1, $size));
         $this->DebugMessage('Using built-in font (size=' . $size . ') for text watermark' . ($ttffont ? ' because $ttffont !is_readable(' . $ttffont . ')' : ''), __FILE__, __LINE__);
         $text_width = 0;
         $text_height = 0;
         foreach ($textlines as $dummy => $line) {
             $text_width = max($text_width, ImageFontWidth($size) * strlen($line));
             $text_height += ImageFontHeight($size);
         }
         if ($img_watermark = phpthumb_functions::ImageCreateFunction($text_width, $text_height)) {
             ImageAlphaBlending($img_watermark, false);
             if (phpthumb_functions::IsHexColor($bg_color)) {
                 $text_background_alpha = round(127 * ((100 - min(max(0, $bg_opacity), 100)) / 100));
                 $text_color_background = phpthumb_functions::ImageHexColorAllocate($img_watermark, $bg_color, false, $text_background_alpha);
             } else {
                 $text_color_background = phpthumb_functions::ImageHexColorAllocate($img_watermark, 'FFFFFF', false, 127);
             }
             $this->DebugMessage('WatermarkText() calling ImageFilledRectangle($img_watermark, 0, 0, ' . ImageSX($img_watermark) . ', ' . ImageSY($img_watermark) . ', $text_color_background)', __FILE__, __LINE__);
             ImageFilledRectangle($img_watermark, 0, 0, ImageSX($img_watermark), ImageSY($img_watermark), $text_color_background);
             if ($angle && function_exists('ImageRotate')) {
                 // using $img_watermark_mask is pointless if ImageRotate function isn't available
                 if ($img_watermark_mask = phpthumb_functions::ImageCreateFunction($text_width, $text_height)) {
                     $mask_color_background = ImageColorAllocate($img_watermark_mask, 0, 0, 0);
                     ImageAlphaBlending($img_watermark_mask, false);
                     ImageFilledRectangle($img_watermark_mask, 0, 0, ImageSX($img_watermark_mask), ImageSY($img_watermark_mask), $mask_color_background);
                     $mask_color_watermark = ImageColorAllocate($img_watermark_mask, 255, 255, 255);
                 }
             }
             $text_color_watermark = phpthumb_functions::ImageHexColorAllocate($img_watermark, $hex_color);
             foreach ($textlines as $key => $line) {
                 switch ($alignment) {
                     case 'C':
                         $x_offset = round(($text_width - ImageFontWidth($size) * strlen($line)) / 2);
                         $originOffsetX = (ImageSX($gdimg) - ImageSX($img_watermark)) / 2;
                         $originOffsetY = (ImageSY($gdimg) - ImageSY($img_watermark)) / 2;
                         break;
                     case 'T':
                         $x_offset = round(($text_width - ImageFontWidth($size) * strlen($line)) / 2);
                         $originOffsetX = (ImageSX($gdimg) - ImageSX($img_watermark)) / 2;
开发者ID:exside,项目名称:phpThumb,代码行数:67,代码来源:phpthumb.filters.php

示例12: drawYLables

function drawYLables($image, $w, $h, $col, $top, $right, $left, $bottom, $max)
{
    $gHeight = $h - ($top + $bottom);
    $space = $gHeight / 4;
    $y = $top;
    $quater = round($max / 4, 0);
    for ($a = 1; $a < 5; $a++) {
        $len = strlen($max);
        $width = ImageFontWidth(1) * $len;
        ImageString($image, 0, 32 - $width, $y - 2, $max, $col);
        $y = $y + $space;
        $max = $max - $quater;
    }
}
开发者ID:BackupTheBerlios,项目名称:yac-svn,代码行数:14,代码来源:graph.php

示例13: DrawXDataLabel

 function DrawXDataLabel($xlab, $xpos)
 {
     //xpos comes in in PIXELS not in world coordinates.
     //Draw an x data label centered at xlab
     if ($this->use_ttf) {
         $xlab_size = $this->TTFBBoxSize($this->axis_ttffont_size, $this->x_datalabel_angle, $this->axis_ttffont, $xlab);
         //An array
         $y = $this->plot_area[3] + $xlab_size[1] + 4;
         //in pixels
         $x = $xpos - $xlab_size[0] / 2;
         ImageTTFText($this->img, $this->axis_ttffont_size, $this->x_datalabel_angle, $x, $y, $this->ndx_text_color, $this->axis_ttffont, $xlab);
     } else {
         $xlab_size = array(ImageFontWidth($this->axis_font) * StrLen($xlab), $this->small_font_height * 3);
         if ($this->x_datalabel_angle == 90) {
             $y = $this->plot_area[3] + ImageFontWidth($this->axis_font) * StrLen($xlab);
             //in pixels
             $x = $xpos - $this->small_font_height;
             ImageStringUp($this->img, $this->axis_font, $x, $y, $xlab, $this->ndx_text_color);
         } else {
             $y = $this->plot_area[3] + ImageFontHeight($this->axis_font);
             //in pixels
             $x = $xpos - ImageFontWidth($this->axis_font) * StrLen($xlab) / 2;
             ImageString($this->img, $this->axis_font, $x, $y, $xlab, $this->ndx_text_color);
         }
     }
 }
开发者ID:othreed,项目名称:osCommerce-234-bootstrap-wADDONS,代码行数:26,代码来源:phplot.php

示例14: textHeight

 /**
  * Get the height of a text.
  * 
  * Note! This method can give some peculiar results, since ImageTTFBBox() returns the total
  * bounding box of a text, where ImageTTF() writes the text on the baseline of the text, that
  * is 'g', 'p', 'q' and other letters that dig under the baseline will appear to have a larger
  * height than they actually do. Have a look at the tests/text.php test case - the first two
  * columns, 'left and 'center', both look alright, whereas the last column, 'right', appear
  * with a larger space between the first text and the second. This is because the total height
  * is actually smaller by exactly the number of pixels that the 'g' digs under the baseline.
  * Remove the 'g' from the text and they appear correct. 
  *
  * @param string $text The text to get the height of
  * @param bool $force Force the method to calculate the size
  * @return int The height of the text
  */
 function textHeight($text, $force = false)
 {
     if (isset($this->_font['file'])) {
         $angle = 0;
         if (isset($this->_font['angle'])) {
             $angle = $this->_font['angle'];
         }
         $linebreaks = substr_count($text, "\n");
         if ($angle == 0 && $force === false) {
             /*
              * if the angle is 0 simply return the size, due to different
              * heights for example for x-axis labels, making the labels
              * _not_ appear as written on the same baseline
              */
             return $this->_font['size'] + ($this->_font['size'] + 2) * $linebreaks;
         }
         $height = 0;
         $lines = explode("\n", $text);
         foreach ($lines as $line) {
             $bounds = ImageTTFBBox($this->_font['size'], $angle, $this->_font['file'], $line);
             $y0 = min($bounds[1], $bounds[3], $bounds[5], $bounds[7]);
             $y1 = max($bounds[1], $bounds[3], $bounds[5], $bounds[7]);
             $height += abs($y0 - $y1);
         }
         return $height + $linebreaks * 2;
     } else {
         if (isset($this->_font['vertical']) && $this->_font['vertical']) {
             $width = 0;
             $lines = explode("\n", $text);
             foreach ($lines as $line) {
                 $width = max($width, ImageFontWidth($this->_font['font']) * strlen($line));
             }
             return $width;
         } else {
             return ImageFontHeight($this->_font['font']) * (substr_count($text, "\n") + 1);
         }
     }
 }
开发者ID:chiranjeevjain,项目名称:agilebill,代码行数:54,代码来源:GD.php

示例15: imagestring

    imagestring($im, 2, $x1, $height - $space + 5, $lts[$i], $black);
}
$bar_width = ($width - $left_space - $space - 15) / $cols / $g < 10 ? ($width - $left_space - $space - 15) / $cols / $g - 1 : 10;
for ($n = 0; $n < $g; $n++) {
    $ps = $_GET['ps' . ($n + 1)];
    //点坐标
    $pa = explode(',', $ps);
    //点坐标数组
    $cnt = count($pa);
    $clr = isset($_GET['clr' . ($n + 1)]) ? $_GET['clr' . ($n + 1)] : '';
    if ($clr != '') {
        $ca = explode(',', $clr);
    } else {
        $ca = array(0, 0, 0);
    }
    $color = imagecolorallocate($im, $ca[0], $ca[1], $ca[2]);
    for ($i = 0; $i < $cnt; $i++) {
        $x1 = intval($left_space + ($width - $left_space - $space - 5) / $cols * $i) + $bar_width * $n + 1;
        $y1 = intval($height - $space - ($pa[$i] - $rmi) / ($rma - $rmi) * ($height - 2 * $space - 5));
        $x2 = $x1 + $bar_width;
        $y2 = $height - $space - 1;
        imagefilledrectangle($im, $x1, $y1, $x2, $y2, $color);
    }
}
$wf5 = ImageFontWidth(5);
$t_len = $wf5 * strlen($title);
//echo $cw.' '.$ch;die();
imagestring($im, 5, $width / 2 - $t_len / 2, 5, $title, $black);
Header("Content-type: image/gif");
ImageGif($im);
ImageDestroy($im);
开发者ID:RenzcPHP,项目名称:3dproduct,代码行数:31,代码来源:drawBarGraph.php


注:本文中的ImageFontWidth函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。