Informationen über Bilder

Hi,

Ach, das war die Seite die Ich über die GDLib Effekte schon ne Weile gesucht habe!
Woah :D!

Deins kommt irgendwie besser rüber, werde mit deinen Sources mal probieren, auch RGB Werte darstellen zu können, wenn Ich darf :p .

Aber echt Klasse deine Seite!

Gruß Kevin
 
Ich sehe gerade, dass man einige besser schreiben könnte, aber erstmal ging es mir um das Prinzip.
Derweile bastel ich an einer anderen Version die die RGB-Anteile ermittelt, falls es der Server schafft.
 
So, habs nun einigermaßen hinbekommen:
graph.rgb.php.png

PHP:
<?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 );
?>

Hab mir das so zusammenngeschnippelt, danke CIX88 :)!

Gruß kevin
 
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.
Jo das mit der Helligkeit kann sein, aber danke für die Info und werde es damit mal testen.
Hatte als Referenz im Photoshop das selbe BIld geladen und damit auch verglichen.

Das ganze Spiel für die einzelnen Farbkanäle sieht dann etwa so aus:
http://www.cix88.de/cix_php/php_grafik_effekte/cix_effect_44.php
(falls es jemand überhaupt interessiert)
 
@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
 
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
Hmmm, habe ich jetzt nicht verglichen, muss ich mal gucken ..
 
Habe nun noch eine 3D Ansicht probiert:
graph.rgb.php.png

Da habe Ich jeweils Farbe 0 und 255 Abgeschnitten, weil die fast immer total hohe Werte haben, Ich weiß nicht warum das so ist.

Warum gehen bei mir und bei dir die großen Werte immer so dermaßen hoch raus?
 
Zuletzt bearbeitet:
> Kann es sein das bei dir am Ende, also der letze Farbwert fehlt?

Könnte daran liegen, da ich nur jedes 2. Pixel prüfe.
Die GDlib ersetzt leider kein Grafikprogramm.

> Habe nun noch eine 3D Ansicht probiert

Wie hasten das umgesetzt ?

[OT]
Komisch, wenn ich ab und zu auf "direkt antworten" klicke, wird der komplette Beitrag zitiert :-(
Verstehe ich nicht.
 
Zurück