/prototype/smooth-line.php
PHP | 82 lines | 54 code | 10 blank | 18 comment | 11 complexity | a4318efe0f90e45c92de270e1c453b4a MD5 | raw file
Possible License(s): GPL-3.0, Apache-2.0
- <?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 ($im, $x1, $y1, $x2, $y2, $r, $g, $b, $alpha=0) {
- $icr = $r;
- $icg = $g;
- $icb = $b;
- $dcol = imagecolorallocatealpha($im, $icr, $icg, $icb, $alpha);
-
- if ($y1 == $y2 || $x1 == $x2)
- imageline($im, $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($im, $x, floor($y));
- $tcr = ($trgb >> 16) & 0xFF;
- $tcg = ($trgb >> 8) & 0xFF;
- $tcb = $trgb & 0xFF;
- imagesetpixel($im, $x, floor($y), imagecolorallocatealpha($im, ($tcr * $ya + $icr * $yb), ($tcg * $ya + $icg * $yb), ($tcb * $ya + $icb * $yb), $alpha));
-
- $trgb = ImageColorAt($im, $x, ceil($y));
- $tcr = ($trgb >> 16) & 0xFF;
- $tcg = ($trgb >> 8) & 0xFF;
- $tcb = $trgb & 0xFF;
- imagesetpixel($im, $x, ceil($y), imagecolorallocatealpha($im, ($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($im, floor($x), $y);
- $tcr = ($trgb >> 16) & 0xFF;
- $tcg = ($trgb >> 8) & 0xFF;
- $tcb = $trgb & 0xFF;
- imagesetpixel($im, floor($x), $y, imagecolorallocatealpha($im, ($tcr * $xa + $icr * $xb), ($tcg * $xa + $icg * $xb), ($tcb * $xa + $icb * $xb), $alpha));
-
- $trgb = ImageColorAt($im, ceil($x), $y);
- $tcr = ($trgb >> 16) & 0xFF;
- $tcg = ($trgb >> 8) & 0xFF;
- $tcb = $trgb & 0xFF;
- imagesetpixel ($im, ceil($x), $y, imagecolorallocatealpha($im, ($tcr * $xb + $icr * $xa), ($tcg * $xb + $icg * $xa), ($tcb * $xb + $icb * $xa), $alpha));
-
- $y ++;
- }
- }
- }
- return $im;
- } // end of 'imageSmoothAlphaLine()' function
- ?>