countryqt30
Mitglied
Hallo,
Um bestimmte bilder zu filtern, moechte ich pruefen, ob mehr als 50% eines bildes (jpeg, png)
hauttoene sind oder nicht.
Ich habs mit ImageColorAt versucht, das ist jedoch so langsam, dass das php script abbricht (habe zumindest das gefuehl).
Mein code hier:
Meiner vermutung nach wird der code nach ~5 sekunden abgebrochen, weil es zu lange dauert ihn zu bearbeiten, beispiels wird das "okay" in einer der ersten zeilen gar nicht ausgegeben. Versucht den code ruhig mal bei euch
Mein testbild hatte eine Aufloesung von 528x705 px
Habt ihr ideen wie man das machen koennte?
Um bestimmte bilder zu filtern, moechte ich pruefen, ob mehr als 50% eines bildes (jpeg, png)
hauttoene sind oder nicht.
Ich habs mit ImageColorAt versucht, das ist jedoch so langsam, dass das php script abbricht (habe zumindest das gefuehl).
Mein code hier:
Code:
<?php
$img = "a.jpg";
$imgHand = ImageCreateFromJPEG($img);
$imgSize = GetImageSize($img);
$imgWidth = $imgSize[0];
$imgHeight = $imgSize[1];
$counter = 0;
$maxCount = $imgHeight * $imgWidth;
echo "w=$imgWidth, h=$imgHeight<br />";
echo "okaay!";
for($i=0; $i<$imgWidth; ++$i)
{
for($k=0; $k<$imgHeight; ++$k)
{
$col = ImageColorAt($imgHand, $i, $k);
$colArr = html2rgb((string)$col);
$colArrDst = array(99, 93, 33);
echo "count(colArr)=";
for($x=0; $x<3; $x++)
{
if(abs($colArr[$x] - $colArrDst[$x]) < 30)
{
$counter++;
break;
}
}
}
}
echo "counter=$counter<br />";
echo "maxCount=$maxCount<br />";
echo "=>" . $counter / $maxCount . " %";
function html2rgb($color)
{
if (strlen($color) == 6)
list($r, $g, $b) = array($color[0].$color[1],
$color[2].$color[3],
$color[4].$color[5]);
elseif (strlen($color) == 3)
list($r, $g, $b) = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);
else
return false;
$r = hexdec($r); $g = hexdec($g); $b = hexdec($b);
return array($r, $g, $b);
}
?>
Mein testbild hatte eine Aufloesung von 528x705 px
Habt ihr ideen wie man das machen koennte?
Zuletzt bearbeitet: