C
CIX88
Hab auch mal auf die schnelle gefummelt:
http://www.cix88.de/cix_php/php_grafik_effekte/cix_effect_43.php
http://www.cix88.de/cix_php/php_grafik_effekte/cix_effect_43.php
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
<?php
function hex2rgb ( $hex )
{
$hex = preg_replace("/[^a-fA-F0-9]/", "", $hex);
$rgb = array();
if ( strlen ( $hex ) == 3 )
{
$rgb[0] = hexdec ( $hex[0] . $hex[0] );
$rgb[1] = hexdec ( $hex[1] . $hex[1] );
$rgb[2] = hexdec ( $hex[2] . $hex[2] );
}
elseif ( strlen ( $hex ) == 6 )
{
$rgb[0] = hexdec ( $hex[0] . $hex[1] );
$rgb[1] = hexdec ( $hex[2] . $hex[3] );
$rgb[2] = hexdec ( $hex[4] . $hex[5] );
}
else
{
return "ERR: Incorrect colorcode, expecting 3 or 6 chars (a-f, A-F, 0-9)";
}
return $rgb;
}
header('Content-type: image/png');
/*
Schwarz/Weiss-Anteile aus einen Bild ermitteln
*/
// Einstellungen
$bild = 'http://www.cix88.de/cix_php/php_grafik_effekte/test.jpg';
// Raster, Wert 2 kommt dem Ergebnis zu Photoshop sehr nahe
$raster = 2;
/* ----------------------------------------------------------------- */
// Originalbild laden
$im = imageCreateFromJPEG( $bild );
// Breite und Höhe ermitteln
$OriginalBB = imageSX( $im );
$OriginalHH = imageSY( $im );
// Zähler für Array
$cc = 0;
// Array für Farbinformationen
$col_array = Array();
// Originalbild nach Anteile abtasten
for ($x = 1; $x < $OriginalBB; $x += $raster ) {
for ($y = 1; $y < $OriginalHH; $y += $raster ) {
// Farbinformationen ermitteln
$rgb = imagecolorsforindex($im, imagecolorat($im, $x, $y));
$r = $rgb['red'];
$g = $rgb['green'];
$b = $rgb['blue'];
$a = $rgb['alpha'];
$color_array['red'][$r]++;
$color_array['green'][$g]++;
$color_array['blue'][$b]++;
$color_array['alpha'][$a]++;
}
$cc++;
}
$keys = array('red', 'green', 'blue', 'alpha');
foreach ($keys as $dummy => $key) {
ksort($color_array[$key]);
}
// Speicher frei geben
ImageDestroy( $im );
// Kontrolle (recht viele Zahlen)
//echo '<pre>'. print_r($color_array, true). '</pre>';
/* ----------------------------------------------------------------- */
// Histogramm erstellen
$x = 0;
$hoehe = 200;
$bands="rgba";
// neues Bild erstellen und Farben definieren
$im = ImageCreate( 400, $hoehe);
$weiss = ImageColorAllocate($im, 255, 255, 255);
$black = ImageColorAllocate($im, 0, 0, 0);
$color_keys = array('r'=>'red', 'g'=>'green', 'b'=>'blue', 'a'=>'alpha', '*'=>'gray');
$DefaultColors = array('r'=>'FF0000', 'g'=>'00FF00', 'b'=>'0000FF', 'a'=>'999999', '*'=>'FFFFFF');
$BandsToGraph = array_unique(preg_split('//', $bands));
$count = 0;
foreach ($BandsToGraph as $key => $band) {
if (!isset($color_keys[$band])) { continue; }
$colorrgb = hex2rgb($DefaultColors[$band]);
$thisColor = ImageColorAllocate ($im, $colorrgb[0], $colorrgb[1], $colorrgb[2]);
$graphmaxheight = 100;
for ($i=0; $i<256; $i++) {
$color = $color_array[$color_keys[$band]][$i];
$y = floor(($color * $graphmaxheight) / 255);
ImageLine( $im, $count+$i, ($graphmaxheight - $y)+$count, $count+$i, $graphmaxheight+$count, $thisColor);
}
$count=$count+22;}
// Bild speichern und Speicher frei geben
ImagePNG( $im );
ImageDestroy( $im );
?>
Für die Berechnung der Helligkeit nimmt man besser den gewichteten Mittelwert 0,299·R + 0,587·G + 0,114·B anstatt des arithmetischen Mittelwerts.CIX88 hat gesagt.:Hab auch mal auf die schnelle gefummelt:
http://www.cix88.de/cix_php/php_grafik_effekte/cix_effect_43.php
Jo das mit der Helligkeit kann sein, aber danke für die Info und werde es damit mal testen.Matthias Reitinger hat gesagt.:Für die Berechnung der Helligkeit nimmt man besser den gewichteten Mittelwert 0,299·R + 0,587·G + 0,114·B anstatt des arithmetischen Mittelwerts.
Hmmm, habe ich jetzt nicht verglichen, muss ich mal gucken ..kevkev hat gesagt.:@CIX88:
Kann es sein das bei dir am Ende, also der letze Farbwert fehlt?
Unter Gimp bekomme Ich für die letze Farbe einen hohen Wert, dort geht die Linie ganz nach oben, bei dir fehlt diese Linie.
Gruß Kevin