note 56524 added to function.imageline

From: Date: Tue, 06 Sep 2005 10:12:00 +0000
Subject: note 56524 added to function.imageline
Groups: php.notes 
Request: Send a blank email to php-notes+get-94803@lists.php.net to get a copy of this message
Here my function do clear all problems. With this, you can draw firstly smooth lines (basic code adapted from code_couturier at graffiti dot net, with some performance changes). The special is, you can define the alpha-value of the line (0 = normal smooth line, 127 = fully transparent). Change whatever you want to make it better, but post your results ;) <?php /** * function imageSmoothAlphaLine() - version 1.0 * Draws a smooth line with alpha-functionality * * @param ident the image to draw on * @param integer x1 * @param integer y1 * @param integer x2 * @param integer y2 * @param integer red (0 to 255) * @param integer green (0 to 255) * @param integer blue (0 to 255) * @param integer alpha (0 to 127) * * @access public * * @author DASPRiD <d@sprid.de> */ function imageSmoothAlphaLine ($image, $x1, $y1, $x2, $y2, $r, $g, $b, $alpha=0) { $icr = $r; $icg = $g; $icb = $b; $dcol = imagecolorallocatealpha($image, $icr, $icg, $icb, $alpha); if ($y1 == $y2 || $x1 == $x2) imageline($image, $x1, $y2, $x1, $y2, $dcol); else { $m = ($y2 - $y1) / ($x2 - $x1); $b = $y1 - $m * $x1; if (abs ($m) <2) { $x = min($x1, $x2); $endx = max($x1, $x2) + 1; while ($x < $endx) { $y = $m * $x + $b; $ya = ($y == floor($y) ? 1: $y - floor($y)); $yb = ceil($y) - $y; $trgb = ImageColorAt($image, $x, floor($y)); $tcr = ($trgb >> 16) & 0xFF; $tcg = ($trgb >> 8) & 0xFF; $tcb = $trgb & 0xFF; imagesetpixel($image, $x, floor($y), imagecolorallocatealpha($image, ($tcr * $ya + $icr * $yb), ($tcg * $ya + $icg * $yb), ($tcb * $ya + $icb * $yb), $alpha)); $trgb = ImageColorAt($image, $x, ceil($y)); $tcr = ($trgb >> 16) & 0xFF; $tcg = ($trgb >> 8) & 0xFF; $tcb = $trgb & 0xFF; imagesetpixel($image, $x, ceil($y), imagecolorallocatealpha($image, ($tcr * $yb + $icr * $ya), ($tcg * $yb + $icg * $ya), ($tcb * $yb + $icb * $ya), $alpha)); $x++; } } else { $y = min($y1, $y2); $endy = max($y1, $y2) + 1; while ($y < $endy) { $x = ($y - $b) / $m; $xa = ($x == floor($x) ? 1: $x - floor($x)); $xb = ceil($x) - $x; $trgb = ImageColorAt($image, floor($x), $y); $tcr = ($trgb >> 16) & 0xFF; $tcg = ($trgb >> 8) & 0xFF; $tcb = $trgb & 0xFF; imagesetpixel($image, floor($x), $y, imagecolorallocatealpha($image, ($tcr * $xa + $icr * $xb), ($tcg * $xa + $icg * $xb), ($tcb * $xa + $icb * $xb), $alpha)); $trgb = ImageColorAt($image, ceil($x), $y); $tcr = ($trgb >> 16) & 0xFF; $tcg = ($trgb >> 8) & 0xFF; $tcb = $trgb & 0xFF; imagesetpixel ($image, ceil($x), $y, imagecolorallocatealpha($image, ($tcr * $xb + $icr * $xa), ($tcg * $xb + $icg * $xa), ($tcb * $xb + $icb * $xa), $alpha)); $y ++; } } } } // end of 'imageSmoothAlphaLine()' function ?> ---- Manual Page -- http://www.php.net/manual/en/function.imageline.php Edit -- http://master.php.net/manage/user-notes.php?action=edit+56524 Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+56524&report=yes&reason=added+to+the+manual Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+56524&report=yes&reason=bad+code Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+56524&report=yes&reason=spam Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+56524&report=yes&reason=useless Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+56524&report=yes&reason=non-english Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+56524&report=yes Reject -- http://master.php.net/manage/user-notes.php?action=reject+56524&report=yes Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#94803) next »