文字

imagesetstyle

(PHP 4 >= 4.0.6, PHP 5, PHP 7)

imagesetstyle设定画线的风格

说明

bool imagesetstyle ( resource $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 );
?>

以上例程的输出类似于:

Output of example : imagesetstyle()

参见

  • imagesetbrush() - 设定画线用的画笔图像
  • imageline() - 画一条线段

用户评论:

[#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
($imfalse);
  
$style = array($gridxcolor$gridxcolorIMG_COLOR_TRANSPARENTIMG_COLOR_TRANSPARENT);
  
imagesetstyle($im$style);
  
imageline($im$x0$x$ymax+5IMG_COLOR_STYLED);
  
imageantialias($imtrue);
?>


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

上一篇: 下一篇: