PHP 8.5.0 Alpha 1 available for testing

imagesetstyle

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

imagesetstyleConfigura el estilo para el dibujo de líneas

Descripción

imagesetstyle(GdImage $image, array $style): bool

imagesetstyle() permite seleccionar el estilo a utilizar al dibujar líneas (como con las funciones imageline() y imagepolygon()) al utilizar la color especial IMG_COLOR_STYLED o bien al dibujar líneas con la color IMG_COLOR_STYLEDBRUSHED.

Parámetros

image

Un recurso image, es devuelto por una de las funciones de creación de imágenes, como imagecreatetruecolor().

style

Un array de colores de píxeles. Puede utilizarse la constante IMG_COLOR_TRANSPARENT para añadir un píxel transparente. Tenga en cuenta que style no debe ser un array array vacío.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Ejemplos

El siguiente ejemplo dibuja una línea punteada desde la esquina superior izquierda hacia la esquina inferior derecha de la imagen:

Ejemplo #1 Ejemplo para imagesetstyle()

<?php
header
("Content-type: image/jpeg");
$im = imagecreatetruecolor(100, 100);
$w = imagecolorallocate($im, 255, 255, 255);
$red = imagecolorallocate($im, 255, 0, 0);

/* Dibuja una línea punteada de 5 píxeles rojos, 5 píxeles blancos */
$style = array($red, $red, $red, $red, $red, $w, $w, $w, $w, $w);
imagesetstyle($im, $style);
imageline($im, 0, 0, 100, 100, IMG_COLOR_STYLED);

/* Dibuja una línea con smileys, utilizando imagesetbrush() y imagesetstyle */
$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);
?>

El resultado del ejemplo sería algo similar a:

Visualización del ejemplo: imagesetstyle()

Ver también

add a note

User Contributed Notes 7 notes

up
1
Michael_Todd_335 at yahoo dot com
18 years ago
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.
up
0
dazbert
8 years ago
To clarify, for lines where the thickness is greater than 1, the total length of the $style array needs to be an exact divisor of the length of the line.

This is because the pattern is repeated lengthways and wraps onto the second row of pixels, causing staggering to occur.

So if you have 5 red and 5 white pixels, and you want a line length of 55 pixels, either change the length to a multiple of 10, or change the dashes to, say, 6 red and 5 white.
up
0
Anonymous
12 years ago
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);

?>
up
-1
Wander
17 years ago
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
?>
up
-1
Cruz at FtUC dot net
19 years ago
When lines drawn with imagesetstyle seem to produce a thin white line only, make sure antialiasing is disabled.

<?
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.
up
-2
php at imperium dot be
14 years ago
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
/*
ImageStyleThicken(<aStyle>,<iThickness>) --> <aThickStyle>

<aStyle> is the style array for a thickness of 1 (see imagesetstyle()).
<iThickness> is the new thickness to apply (see imagesetthickness()).

<aThickStyle> is the style array suitable for the given thickness.
*/
function ImageStyleThicken($_1,$_2) {
$a = array();
foreach (
$_1 as $x) {
$i = $_2;
do
$a[] = $x; while (--$i>0); }
return
$a;
}
?>
up
-1
zackbloom at gmail dot com
19 years ago
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;
}
To Top