As has been reported, 1-dimensional horizontal filled polygons are not drawn
at all. That is caused by the scanline algorithm used for drawing filled
polygons which skips the drawing of horizontal edges, because that is
normally not necessary. If, however, the polygon consists of horizontal
edges only, that obviously doesn't work, so we add a special case handling.
That has also been fixed in libgd with
<https://github.com/libgd/libgd/commit/
f9f10fa9>.
maxy = p[i].y;
}
}
+ /* necessary special case: horizontal line */
+ if (n > 1 && miny == maxy) {
+ x1 = x2 = p[0].x;
+ for (i = 1; (i < n); i++) {
+ if (p[i].x < x1) {
+ x1 = p[i].x;
+ } else if (p[i].x > x2) {
+ x2 = p[i].x;
+ }
+ }
+ gdImageLine(im, x1, miny, x2, miny, c);
+ return;
+ }
pmaxy = maxy;
/* 2.0.16: Optimization by Ilia Chipitsine -- don't waste time offscreen */
if (miny < 0) {
--- /dev/null
+--TEST--
+Bug #64641 (imagefilledpolygon doesn't draw horizontal line)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die("skip gd extension not available\n");
+?>
+--FILE--
+<?php
+require_once __DIR__ . '/similarity.inc';
+
+$im = imagecreatetruecolor(640, 480);
+
+$points = array(
+ 100, 100,
+ 100, 200,
+ 100, 300
+);
+imagefilledpolygon($im, $points, 3, 0xFFFF00);
+
+$points = array(
+ 300, 200,
+ 400, 200,
+ 500, 200
+);
+imagefilledpolygon($im, $points, 3, 0xFFFF00);
+
+$ex = imagecreatefrompng(__DIR__ . '/bug64641.png');
+if (($diss = calc_image_dissimilarity($ex, $im)) < 1e-5) {
+ echo "IDENTICAL";
+} else {
+ echo "DISSIMILARITY: $diss";
+}
+imagedestroy($ex);
+
+imagedestroy($im);
+?>
+--EXPECT--
+IDENTICAL
var_dump($corA);
?>
--EXPECT--
-string(32) "b856a0b1a15efe0f79551ebbb5651fe8"
+string(32) "2a6424e4cb4e1b7391dfff74bf136bde"
int(842163455)
\ No newline at end of file
echo md5(base64_encode($img));
?>
--EXPECT--
-894f394c7f2e2364642ef27fea6bfc33
+beffeaf5231adaaff1f21a2108fb6f7e
echo md5(base64_encode($img));
?>
--EXPECT--
-b77bbb8207e5adbebfcc8bd1c4074305
+b467492b806001c3720b3f18cfbde5b0
echo md5(base64_encode($img));
?>
--EXPECT--
-b8b572812b3c85678f6c38c4ecca7619
+cfad369fc6d863785d3c95b4b4788225
echo md5(base64_encode($img));
?>
--EXPECT--
-30639772903913594bc665743e1b9ab8
+e79553115df689ea5df18a4636380569
echo md5(base64_encode($img));
?>
--EXPECT--
-7716c0905ae08bd84b4d6cba8969a42e
+b017b1ddc8bda00e82aa8cbfb54c35d4
?>
--EXPECT--
bool(true)
-0843f63ab2f9fddedd69b0b421686bc5
\ No newline at end of file
+1d41787ff70aa0c7eea5ee9304afa36b
\ No newline at end of file