我有问题.. 有一些图片,如下:
我希望为此雷达图像添加新的分辨率,背景和更好的质量(抗锯齿)。如何使用PHP脚本从此图像获取雷达详细信息?
我已经有了这段代码,但输出并不是最好的:你可以在这里看到它:
<?
$im = imagecreatefromjpeg('a.jpg');
$f1 = imagecolorallocate($im, 39, 78, 231);
$a = imagecreatetruecolor ( 520, 370 );
$red = imagecolorallocate($a, 39,78,231);
for($x =130;$x<520;$x++)
{
for($y = 130; $y<370;$y++)
{
$rgb = imagecolorat($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$red = imagecolorallocate($a, $r,$g,$b);
//echo $r.$ g.$b."|";
if( ($r < 100 && $r > 0) && ($g < 150 && $g > 0) && ($b < 255 && $b > 150))
imagesetpixel($a, $x, $y, $red);
if( ($r < 100 && $r > 0) && ($g < 255 && $g > 130) && ($b < 255 && $b > 0))
imagesetpixel($a, $x, $y, $red);
if( ($r < 200 && $r > 100) && ($g < 255 && $g > 180) && ($b < 80 && $b > 0))
imagesetpixel($a, $x, $y, $red);
if( ($r < 255 && $r > 0) && ($g < 255 && $g > 0) && ($b < 50 && $b > 0))
imagesetpixel($a, $x, $y, $red);
if( ($r < 255 && $r > 200) && ($g < 255 && $g > 70) && ($b < 70 && $b > 0))
imagesetpixel($a, $x, $y, $red);
if( ($r < 255 && $r > 200) && ($g < 100 && $g > 0) && ($b < 70 && $b > 0))
imagesetpixel($a, $x, $y, $red);
if( ($r < 120 && $r > 0) && ($g < 50 && $g > 0) && ($b < 50 && $b > 0))
imagesetpixel($a, $x, $y, $red);
}
}
//$rgb = imagecolorat($im, 550, 465);
//$r = ($rgb >> 16) & 0xFF;
//$g = ($rgb >> 8) & 0xFF;
//$b = $rgb & 0xFF;
//echo "$r $g $b";
header('Content-Type: image/png');
imagepng($a);
?>
答案 0 :(得分:2)
用图片替换kép.jpg。第一次尝试。我想我可以调整一些事情来接近。
第二次尝试:地板似乎比圆形好得多。
第3次尝试:在代码中添加了2个过滤器。
<?php
header('content-type: image/png');
//header('content-type: text/plain');
$im = imagecreatefromjpeg ('images/a.jpg');
list($width, $height, $type, $attr) = getimagesize('images/a.jpg');
$im2 = imagecreate($width, $height);
$x = 540;
$y = 353;
$colors = array();
$num = 100;
$num2 = 15 * 11 * $num;
$num3 = 100;
$num4 = 65;
$num5 = 15 * 11 * $num4;
$num6 = 65;
imagecolorallocate($im2, 255, 255, 255);
for ($k = 0; $k < 7; $k ++) {
$ar = 0;
$ag = 0;
$ab = 0;
for ($i = 0; $i < 15; $i ++) {
for ($j = 0; $j < 11; $j ++) {
$tc = imagecolorat($im, $x + $i, $y + $j + $k * 18);
$ar += ($tc >> 16) & 0xFF;
$ag += ($tc >> 8) & 0xFF;
$ab += $tc & 0xFF;
}
}
$c = new STDClass();
if ($k == 0) {
$c->r = floor ($ar / $num5) * $num4;
$c->g = floor ($ag / $num5) * $num4;
$c->b = floor ($ab / $num5) * $num4;
} else {
$c->r = floor ($ar / $num2) * $num;
$c->g = floor ($ag / $num2) * $num;
$c->b = floor ($ab / $num2) * $num;
}
$c->c = imagecolorallocate($im2, $c->r, $c->g, $c->b);
$colors[] = $c;
imagefilledrectangle($im2, 0, $k * 11, 15, $k * 11 + 11, $c->c);
}
$pixelmap = array();
$pm2 = array();
for ($i = 0; $i < $width; $i ++) {
$pixelmap[$i] = array();
$pm2[$i] = array();
for ($j = 0; $j < $height; $j ++) {
$pixelmap[$i][$j] = false;
$pm2[$i][$j] = false;
$c = imagecolorat($im, $i, $j);
$r = ($c >> 16) & 0xFF;
$g = ($c >> 8) & 0xFF;
$b = $c & 0xFF;
$r = floor ($r / $num3) * $num3;
$g = floor ($g / $num3) * $num3;
$b = floor ($b / $num3) * $num3;
$r2 = floor ($r / $num6) * $num6;
$g2 = floor ($g / $num6) * $num6;
$b2 = floor ($b / $num6) * $num6;
for ($k = 0; $k < 7; $k ++) {
$colorOK = true;
if ($k == 0) {
if ($r2 != $colors[$k]->r) { $colorOK = false; }
if ($g2 != $colors[$k]->g) { $colorOK = false; }
if ($b2 != $colors[$k]->b) { $colorOK = false; }
} else {
if ($r != $colors[$k]->r) { $colorOK = false; }
if ($g != $colors[$k]->g) { $colorOK = false; }
if ($b != $colors[$k]->b) { $colorOK = false; }
}
if ($colorOK) { break; }
}
if ($k < 7) { // else no mathing color was found
$pixelmap[$i][$j] = $colors[$k]->c;
//imagesetpixel($im2, $i, $j, $pixelmap[$i][$j]);
}
}
}
for ($i = 1; $i < $width - 1; $i ++) {
for ($j = 1; $j < $height - 1; $j ++) {
if ($pixelmap[$i][$j] !== false) {
if ($pixelmap[$i ][$j - 1] !== false ||
$pixelmap[$i + 1][$j - 1] !== false ||
$pixelmap[$i + 1][$j ] !== false ||
$pixelmap[$i + 1][$j + 1] !== false ||
/*$pixelmap[$i ][$j + 1] !== false ||*/
$pixelmap[$i - 1][$j + 1] !== false ||
$pixelmap[$i - 1][$j ] !== false) {
//imagesetpixel($im2, $i, $j, $pixelmap[$i][$j]);
} else {
$pixelmap[$i][$j] = false;
}
$pm2[$i][$j] = $pixelmap[$i][$j];
} else {
$surroundColors = array();
if (isset($surroundColors[$pixelmap[$i - 1][$j - 1]])) { $surroundColors[$pixelmap[$i - 1][$j - 1]]++; } else { $surroundColors[$pixelmap[$i - 1][$j - 1]] = 1; };
if (isset($surroundColors[$pixelmap[$i ][$j - 1]])) { $surroundColors[$pixelmap[$i ][$j - 1]]++; } else { $surroundColors[$pixelmap[$i ][$j - 1]] = 1; };
if (isset($surroundColors[$pixelmap[$i + 1][$j - 1]])) { $surroundColors[$pixelmap[$i + 1][$j - 1]]++; } else { $surroundColors[$pixelmap[$i + 1][$j - 1]] = 1; };
if (isset($surroundColors[$pixelmap[$i + 1][$j ]])) { $surroundColors[$pixelmap[$i + 1][$j ]]++; } else { $surroundColors[$pixelmap[$i + 1][$j ]] = 1; };
if (isset($surroundColors[$pixelmap[$i + 1][$j + 1]])) { $surroundColors[$pixelmap[$i + 1][$j + 1]]++; } else { $surroundColors[$pixelmap[$i + 1][$j + 1]] = 1; };
if (isset($surroundColors[$pixelmap[$i ][$j + 1]])) { $surroundColors[$pixelmap[$i ][$j + 1]]++; } else { $surroundColors[$pixelmap[$i ][$j + 1]] = 1; };
if (isset($surroundColors[$pixelmap[$i - 1][$j + 1]])) { $surroundColors[$pixelmap[$i - 1][$j + 1]]++; } else { $surroundColors[$pixelmap[$i - 1][$j + 1]] = 1; };
if (isset($surroundColors[$pixelmap[$i - 1][$j ]])) { $surroundColors[$pixelmap[$i - 1][$j ]]++; } else { $surroundColors[$pixelmap[$i - 1][$j ]] = 1; };
$c = array_keys ($surroundColors);
$pm2[$i][$j] = ($c[0] == false ? false : $c[0]);
//imagesetpixel($im2, $i, $j, $c[0]);
}
}
}
$pixelmap = $pm2;
for ($i = 1; $i < $width - 1; $i ++) {
for ($j = 1; $j < $height - 1; $j ++) {
if ($pixelmap[$i][$j] !== false) {
if ($pixelmap[$i ][$j - 1] !== false ||
$pixelmap[$i + 1][$j - 1] !== false ||
$pixelmap[$i + 1][$j ] !== false ||
$pixelmap[$i + 1][$j + 1] !== false ||
/*$pixelmap[$i ][$j + 1] !== false ||*/
$pixelmap[$i - 1][$j + 1] !== false ||
$pixelmap[$i - 1][$j ] !== false) {
imagesetpixel($im2, $i, $j, $pixelmap[$i][$j]);
} else {
$pixelmap[$i][$j] = false;
}
} else {
$surroundColors = array();
if (isset($surroundColors[$pixelmap[$i - 1][$j - 1]])) { $surroundColors[$pixelmap[$i - 1][$j - 1]]++; } else { $surroundColors[$pixelmap[$i - 1][$j - 1]] = 1; };
if (isset($surroundColors[$pixelmap[$i ][$j - 1]])) { $surroundColors[$pixelmap[$i ][$j - 1]]++; } else { $surroundColors[$pixelmap[$i ][$j - 1]] = 1; };
if (isset($surroundColors[$pixelmap[$i + 1][$j - 1]])) { $surroundColors[$pixelmap[$i + 1][$j - 1]]++; } else { $surroundColors[$pixelmap[$i + 1][$j - 1]] = 1; };
if (isset($surroundColors[$pixelmap[$i + 1][$j ]])) { $surroundColors[$pixelmap[$i + 1][$j ]]++; } else { $surroundColors[$pixelmap[$i + 1][$j ]] = 1; };
if (isset($surroundColors[$pixelmap[$i + 1][$j + 1]])) { $surroundColors[$pixelmap[$i + 1][$j + 1]]++; } else { $surroundColors[$pixelmap[$i + 1][$j + 1]] = 1; };
if (isset($surroundColors[$pixelmap[$i ][$j + 1]])) { $surroundColors[$pixelmap[$i ][$j + 1]]++; } else { $surroundColors[$pixelmap[$i ][$j + 1]] = 1; };
if (isset($surroundColors[$pixelmap[$i - 1][$j + 1]])) { $surroundColors[$pixelmap[$i - 1][$j + 1]]++; } else { $surroundColors[$pixelmap[$i - 1][$j + 1]] = 1; };
if (isset($surroundColors[$pixelmap[$i - 1][$j ]])) { $surroundColors[$pixelmap[$i - 1][$j ]]++; } else { $surroundColors[$pixelmap[$i - 1][$j ]] = 1; };
$c = array_keys ($surroundColors);
//$pixelmap[$i][$j] = $c[0];
imagesetpixel($im2, $i, $j, $c[0]);
}
}
}
imagepng ($im2);
?>