imagesetthickness bei horizontalen linien ohne effekt

jer1cho

Mitglied
wenn ich mit imageline
eine horizontale linie zeichne also wo y1 und y2 gleich sind
zb:
PHP:
imageline(30,23,70,23,$col);
ist die linien dicke immer 1 pixel auch wenn ich imagesetthickness benutzt habe, aber sobald ich z.b. y2 etwas größer ist z.b.
PHP:
imageline(30,23,70,24,$col)
, dann ist wieder alles normal also die linie ist dann so dick wie ich sie mit imagesetthickness gesetzt habe.

Ist dass normal?
Oder sollte ich vielleicht mal versuchen php zu updaten?
oder woran liegt dass?

hier noch ein paar infos zur gd lib die ich benutze
Code:
GD Support 	enabled
GD Version 	bundled (2.0.28 compatible)
FreeType Support 	enabled
FreeType Linkage 	with freetype
FreeType Version 	2.1.9
T1Lib Support 	enabled
GIF Read Support 	enabled
GIF Create Support 	enabled
JPG Support 	enabled
PNG Support 	enabled
WBMP Support 	enabled
XBM Support 	enabled
 
Zuletzt bearbeitet:
Hast du mal testweise die Funktion benutzt, die auf der Funktionsseite von [phpf]imageline[/phpf] gegeben wird?

PHP:
function imagelinethick($image, $x1, $y1, $x2, $y2, $color, $thick = 1)
{
    /* this way it works well only for orthogonal lines
    imagesetthickness($image, $thick);
    return imageline($image, $x1, $y1, $x2, $y2, $color);
    */
    if ($thick == 1) {
        return imageline($image, $x1, $y1, $x2, $y2, $color);
    }
    $t = $thick / 2 - 0.5;
    if ($x1 == $x2 || $y1 == $y2) {
        return imagefilledrectangle($image, round(min($x1, $x2) - $t), round(min($y1, $y2) - $t), round(max($x1, $x2) + $t), round(max($y1, $y2) + $t), $color);
    }
    $k = ($y2 - $y1) / ($x2 - $x1); //y = kx + q
    $a = $t / sqrt(1 + pow($k, 2));
    $points = array(
        round($x1 - (1+$k)*$a), round($y1 + (1-$k)*$a),
        round($x1 - (1-$k)*$a), round($y1 - (1+$k)*$a),
        round($x2 + (1+$k)*$a), round($y2 - (1-$k)*$a),
        round($x2 + (1-$k)*$a), round($y2 + (1+$k)*$a),
    );
    imagefilledpolygon($image, $points, 4, $color);
    return imagepolygon($image, $points, 4, $color);
}
 
Zurück