©
本文档使用
php.cn手册 发布
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
imagesetstyle — 设定画线的风格
$image
, array $style
) imagesetstyle() 设定所有画线的函数(例如
imageline()
和 imagepolygon() )在使用特殊颜色
IMG_COLOR_STYLED
或者用
IMG_COLOR_STYLEDBRUSHED
画一行图像时所使用的风格。
image
由图象创建函数(例如 imagecreatetruecolor() )返回的图象资源。
style
像素组成的数组。你可以通过常量 IMG_COLOR_TRANSPARENT
来添加一个透明像素。
成功时返回 TRUE
, 或者在失败时返回 FALSE
。
下面的示例脚本在画布上从左上角到右下角画一行虚线:
Example #1 imagesetstyle() 例子
<?php
header ( "Content-type: image/jpeg" );
$im = imagecreatetruecolor ( 100 , 100 );
$w = imagecolorallocate ( $im , 255 , 255 , 255 );
$red = imagecolorallocate ( $im , 255 , 0 , 0 );
$style = array( $red , $red , $red , $red , $red , $w , $w , $w , $w , $w );
imagesetstyle ( $im , $style );
imageline ( $im , 0 , 0 , 100 , 100 , IMG_COLOR_STYLED );
$style = array( $w , $w , $w , $w , $w , $w , $w , $w , $w , $w , $w , $w , $red );
imagesetstyle ( $im , $style );
$brush = imagecreatefrompng ( "http://www.libpng.org/pub/png/images/smile.happy.png" );
$w2 = imagecolorallocate ( $brush , 255 , 255 , 255 );
imagecolortransparent ( $brush , $w2 );
imagesetbrush ( $im , $brush );
imageline ( $im , 100 , 0 , 0 , 100 , IMG_COLOR_STYLEDBRUSHED );
imagejpeg ( $im );
imagedestroy ( $im );
?>
以上例程的输出类似于:
[#1] Anonymous [2012-10-22 16:03:12]
a shortcut for basic dashed lines, making it easy to adjust the lengths:
<?php
$length1 = 20;
$length2 = 10;
$style = array_merge(array_fill(0, $length1, $red), array_fill(0, $length2, $w));
imagesetstyle($im, $style);
?>
[#2] php at imperium dot be [2010-08-06 07:05:59]
Be aware that styles are applied towards the width of the line instead of linear.
To convert a style to be used for thick lines you can use the function below:
<?php
function ImageStyleThicken($_1,$_2) {
$a = array();
foreach ($_1 as $x) {
$i = $_2;
do $a[] = $x; while (--$i>0); }
return $a;
}
?>
[#3] Wander [2007-12-13 11:12:41]
Function to make a line with random fading:
<?php
function fading_line($img,$sx,$sy,$ex,$ey){
$r=rand(0,5);$g=rand(0,5);$b=rand(0,5);
$l=sqrt((($ex-$sx)*($ex-$sx))+(($ey-$sy)*($ey-$sy)));
for($i=0;$i<$l;$i++){
$a = array(255-((255/$l)*$i), 255,0,(255/$l)*$i/2,(255/$l)*$i,(255-((255/$l)*$i))/2);
$style[]=imagecolorallocate($img,$a[$r],$a[$g],$a[$b]);
}
imagesetstyle($img,$style);
imageline($img,$sx,$sy,$ex,$ey,IMG_COLOR_STYLED);
}
fading_line($img,10,20,490,40); // image, start x, start y, end x, end y
?>
[#4] Michael_Todd_335 at yahoo dot com [2007-06-27 09:40:43]
Watch out! If you pass imagesetstyle() an empty array as the second argument, it will crash your server!
I was messing with it just earlier and accidentally did so, and the page took a good minute to process, when my Apache server came up with the good ol' Windows 'Send Error Report' window.
[#5] Cruz at FtUC dot net [2006-01-15 03:45:00]
When lines drawn with imagesetstyle seem to produce a thin white line only, make sure antialiasing is disabled.
<?php
imageantialias($im, false);
$style = array($gridxcolor, $gridxcolor, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT);
imagesetstyle($im, $style);
imageline($im, $x, 0, $x, $ymax+5, IMG_COLOR_STYLED);
imageantialias($im, true);
?>
Setstyle and Antialias don't go together.
[#6] zackbloom at gmail dot com [2005-12-06 14:44:28]
Use this to set the style to any combination of pixels.
You can pass as many modifiers as you wish.
Use the format [num]r[red]g[green]b[blue].
For example:
$im=dashed($im,"4r255g0b0","2r0g255b0","5r0g0b255");
imageline($im, 0, 0, 600, 600, IMG_COLOR_STYLED);
function dashed($im){
$size = func_num_args();
for($i = 0; $i < $size; $i++){
$arg = func_get_arg($i);
if(!is_resource($arg)){
$r=substr($arg,strpos($arg,"r")+1,
strpos($arg,"g")-strpos($arg,"r")-1);
$g=substr($arg,strpos($arg,"g")+1,
strpos($arg,"b")-strpos($arg,"g")-1);
$b=substr($arg,strpos($arg,"b")+1,
strlen($arg)-strpos($arg,"b"));
$color = imagecolorallocate($im,$r,$g,$b);
$x = substr($arg,0,strpos($arg,"r"));
$vals[$i] = array_fill(0,$x,$color);
}
}
for($k=0;$k<count($vals)+1;$k++)
if(array_key_exists($k,$vals)) $prop=array_merge($prop,$vals[$k]);
imagesetstyle($im, $prop);
return $im;
}