1

我需要一个使用 GD 在文本上呈现渐变的函数

就像是

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

2 回答 2

1

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

克里斯托弗·克莱默(Christopher Kramer)开始使用此功能,代码也在此答案下方...

http://www.php.net/manual/en/function.imagefill.php#93920

那么如果你想使用自定义字体文件, 你可以使用imagettfbbox 。http://www.php.net/manual/en/function.imagettfbbox.php

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

在此处粘贴 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);
于 2014-05-19T14:44:41.893 回答
0

使用 GD

http://planetozh.com/blog/my-projects/images-php-gd-gradient-fill/提供了一个使用 GD 创建渐变的类。

渐变可以是线性(水平或垂直)、径向、矩形、菱形。这与您在 Adob​​e Photoshop 上找到的选项相同。

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

  1. 用这个类创建一个渐变矩形
  2. 用指定的字体写你的文字
  3. 混合它们:
    1. 你可以用文字图片的形状切割渐变图片
    2. 您可以将渐变图片应用为文本图片的图案

使用 ImageMagick

而不是使用 GD,我会使用 ImageMagick。

有关如何使用 ImageMagick 实现该目标的示例,请参见http://www.imagemagick.org/Usage/fonts/#gradient ,对于所有渐变,请参见http://www.imagemagick.org/Usage/canvas/#gradient选项。

于 2013-09-07T15:34:56.177 回答