Text 使用GD-PHP的渐变文本填充

Text 使用GD-PHP的渐变文本填充,text,gd,gradient,Text,Gd,Gradient,我需要一个函数,渲染文本梯度使用GD 差不多 function gradientText($text,$font,$color1,$color2) { .. } 使用GD 提供了一个使用GD创建渐变的类 渐变可以是线性(水平或垂直)、径向、矩形或菱形。这与Adobe Photoshop上的选项相同 类方法使用渐变填充矩形区域,因此您可以使用以下方法实现相当大的渐变效果: 使用该类创建渐变矩形 用指定的字体书写文本 混合它们: 您可以使用文本图片的形状剪切渐变图片 您可以将渐变图片应用为

我需要一个函数,渲染文本梯度使用GD

差不多

function gradientText($text,$font,$color1,$color2)
{
    ..
}

使用GD

提供了一个使用GD创建渐变的类

渐变可以是线性(水平或垂直)、径向、矩形或菱形。这与Adobe Photoshop上的选项相同

类方法使用渐变填充矩形区域,因此您可以使用以下方法实现相当大的渐变效果:

  • 使用该类创建渐变矩形
  • 用指定的字体书写文本
  • 混合它们:
  • 您可以使用文本图片的形状剪切渐变图片
  • 您可以将渐变图片应用为文本图片的图案

  • 使用ImageMagick

    我将使用ImageMagick来代替GD


    有关如何使用ImageMagick实现此目标的示例以及所有渐变选项,请参阅。

    使用GD

    提供了一个使用GD创建渐变的类

    渐变可以是线性(水平或垂直)、径向、矩形或菱形。这与Adobe Photoshop上的选项相同

    类方法使用渐变填充矩形区域,因此您可以使用以下方法实现相当大的渐变效果:

  • 使用该类创建渐变矩形
  • 用指定的字体书写文本
  • 混合它们:
  • 您可以使用文本图片的形状剪切渐变图片
  • 您可以将渐变图片应用为文本图片的图案

  • 使用ImageMagick

    我将使用ImageMagick来代替GD


    有关如何使用ImageMagick实现该功能的示例,以及所有渐变选项,请参见。

    我建议您尝试根据自己的需要构建该功能。 您需要将文本垂直/水平居中,更改字体大小等

    从Christopher Kramer的这个函数开始,代码也在这个答案下面

    然后,如果要使用自定义字体文件,可以使用imagettfbbox

    下面是我使用这两个函数生成的示例图像。

    在此处粘贴Chris的渐变代码以供参考:

    <?php
    
    function gradient($w=100, $h=100, $c=array('#FFFFFF','#FF0000','#00FF00','#0000FF'), $hex=true) {
    
     /*
     Generates a gradient image
    
     Author: Christopher Kramer
    
     Parameters:
     w: width in px
     h: height in px
     c: color-array with 4 elements:
        $c[0]:   top left color
        $c[1]:   top right color
        $c[2]:   bottom left color
        $c[3]:   bottom right color
    
     if $hex is true (default), colors are hex-strings like '#FFFFFF' (NOT '#FFF')
     if $hex is false, a color is an array of 3 elements which are the rgb-values, e.g.:
     $c[0]=array(0,255,255);
    
     */
    
     $im=imagecreatetruecolor($w,$h);
    
     if($hex) {  // convert hex-values to rgb
      for($i=0;$i<=3;$i++) { 
       $c[$i]=hex2rgb($c[$i]);
      }
     }
    
     $rgb=$c[0]; // start with top left color
     for($x=0;$x<=$w;$x++) { // loop columns
      for($y=0;$y<=$h;$y++) { // loop rows
       // set pixel color 
       $col=imagecolorallocate($im,$rgb[0],$rgb[1],$rgb[2]);
       imagesetpixel($im,$x-1,$y-1,$col);
       // calculate new color  
       for($i=0;$i<=2;$i++) {
        $rgb[$i]=
          $c[0][$i]*(($w-$x)*($h-$y)/($w*$h)) +
          $c[1][$i]*($x     *($h-$y)/($w*$h)) +
          $c[2][$i]*(($w-$x)*$y     /($w*$h)) +
          $c[3][$i]*($x     *$y     /($w*$h));
       }
      }
     }
     return $im;
    }
    
    function hex2rgb($hex)
     {
     $rgb[0]=hexdec(substr($hex,1,2));
     $rgb[1]=hexdec(substr($hex,3,2));
     $rgb[2]=hexdec(substr($hex,5,2));
     return($rgb);
     }
    
    // usage example
    
    $image=gradient(300, 300, array('#000000', '#FFFFFF', '#FF0000', '#0000FF'));
    
    header('Content-type: image/png');
    imagepng($image);
    imagedestroy($image);
    

    我建议您尝试根据自己的需要构建该功能。
    您需要将文本垂直/水平居中,更改字体大小等

    从Christopher Kramer的这个函数开始,代码也在这个答案下面

    然后,如果要使用自定义字体文件,可以使用imagettfbbox

    下面是我使用这两个函数生成的示例图像。

    在此处粘贴Chris的渐变代码以供参考:

    <?php
    
    function gradient($w=100, $h=100, $c=array('#FFFFFF','#FF0000','#00FF00','#0000FF'), $hex=true) {
    
     /*
     Generates a gradient image
    
     Author: Christopher Kramer
    
     Parameters:
     w: width in px
     h: height in px
     c: color-array with 4 elements:
        $c[0]:   top left color
        $c[1]:   top right color
        $c[2]:   bottom left color
        $c[3]:   bottom right color
    
     if $hex is true (default), colors are hex-strings like '#FFFFFF' (NOT '#FFF')
     if $hex is false, a color is an array of 3 elements which are the rgb-values, e.g.:
     $c[0]=array(0,255,255);
    
     */
    
     $im=imagecreatetruecolor($w,$h);
    
     if($hex) {  // convert hex-values to rgb
      for($i=0;$i<=3;$i++) { 
       $c[$i]=hex2rgb($c[$i]);
      }
     }
    
     $rgb=$c[0]; // start with top left color
     for($x=0;$x<=$w;$x++) { // loop columns
      for($y=0;$y<=$h;$y++) { // loop rows
       // set pixel color 
       $col=imagecolorallocate($im,$rgb[0],$rgb[1],$rgb[2]);
       imagesetpixel($im,$x-1,$y-1,$col);
       // calculate new color  
       for($i=0;$i<=2;$i++) {
        $rgb[$i]=
          $c[0][$i]*(($w-$x)*($h-$y)/($w*$h)) +
          $c[1][$i]*($x     *($h-$y)/($w*$h)) +
          $c[2][$i]*(($w-$x)*$y     /($w*$h)) +
          $c[3][$i]*($x     *$y     /($w*$h));
       }
      }
     }
     return $im;
    }
    
    function hex2rgb($hex)
     {
     $rgb[0]=hexdec(substr($hex,1,2));
     $rgb[1]=hexdec(substr($hex,3,2));
     $rgb[2]=hexdec(substr($hex,5,2));
     return($rgb);
     }
    
    // usage example
    
    $image=gradient(300, 300, array('#000000', '#FFFFFF', '#FF0000', '#0000FF'));
    
    header('Content-type: image/png');
    imagepng($image);
    imagedestroy($image);