kevkev
Erfahrenes Mitglied
CIX88 hat gesagt.:> 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.
Mal schauen wenn Ich das ändere ob sich die Werte dann auch ändern.
Ich habe das so umgesetzt:
Der Abstand ist einfach der x1 und x2 Wert der sich jedesmal bei RGB um 20 vergrößert, so verschiebt sich das ganze erst mal.
Damit das Schräg nach hinten läuft habe Ich ein wenig mit * (Mal) rumprobiert, kann es nicht erklären wie genau das berechnet wird, aber es funktioniert .
Den Farbverlauf habe Ich von deinem Farbverlauf der unter dem Diagramm ist.
Habe einfach die Linienfarbe durch den Farbverlauf ersetzt.
Den 3D Effekt habe Ich durch eine zweites Diagramm direkt vor dem mit dem Farbverlauf gemacht, der hat die Farbe Grün/Rot/Blau.
Aber was rede Ich viel:
PHP:
<?php
header('Content-type: image/png');
$raster = 2;
$abstand = 5;
//Bild laden
$im = ImageCreateFromJPEG ("Physik-1-SOHO-Sonne-SOHO.jpg");
//Höhe und Breite des Bildes ermitteln
$im_width = imagesx($im);
$im_height = imagesy($im);
// Array mit Keys 0-255 füllen
for ( $i = 0; $i <= 255; $i++ ) {
$ColorArray['red'][$i] = 0;
$ColorArray['green'][$i] = 0;
$ColorArray['blue'][$i] = 0;
}
//Nach Farbinformationen abtasten
for ($x = 1; $x < $im_width; $x += $raster ) {
for ($y = 1; $y < $im_height; $y += $raster ) {
//Farbe des einzelnen Pixels
$px_col = imagecolorsforindex($im, ImageColorAt($im, $x, $y));
//Vorkommende Farbwerte zusammenzählen
$ColorArray['red'][$px_col['red']]++;
$ColorArray['green'][$px_col['green']]++;
$ColorArray['blue'][$px_col['blue']]++;
}
}
//Sortieren
$keys = array('red', 'green', 'blue');
foreach ($keys as $dummy => $key) {
ksort($ColorArray[$key]);
}
//Speicher freigeben
ImageDestroy( $im );
$GraphHeight = 110;
//Neues Bild erstellen
$im2 = ImageCreateTrueColor(755, 570);
$white = ImageColorAllocate($im2, 1, 255, 255);
$black = ImageColorAllocate($im2, 0, 0, 0);
$im2_width = imagesx($im2);
$im2_height = imagesy($im2);
imagefilledrectangle($im2, 0, 0, $im2_width, $im2_height, $black);
$x=0;
foreach($ColorArray as $key => $value){
$big=1;
$big2=1;
$faktor2=0.2;
$faktor=0.2;
$padding_left = 170;
$count=0;
foreach($ColorArray[$key] as $key2 => $color){
//if ($key2==0 OR $key2==255) { continue; }
if ($key=="red") { $LineColor=ImageColorAllocate($im2, 255, 0, 0); }
if ($key=="green") { $LineColor=ImageColorAllocate($im2, 0, 255, 0); }
if ($key=="blue") { $LineColor=ImageColorAllocate($im2, 0, 0, 255); }
if ($key=="red") $col = ImageColorAllocate($im2, $key2, 0, 0);
if ($key=="green") $col = ImageColorAllocate($im2, 0, $key2, 0);
if ($key=="blue") $col = ImageColorAllocate($im2, 0, 0, $key2);
$y = floor(($color * $GraphHeight ) / 255);
ImageLine( $im2, ($key2+$x+$padding_left)+$big2, ($GraphHeight - $y + 150)-$big-1, ($key2+$x+$padding_left)+$big2, ($GraphHeight + 150 )-$big-1, $LineColor);
ImageLine( $im2, ($key2+$x+$padding_left)+$big2, ($GraphHeight - $y + 150)-$big, ($key2+$x+$padding_left)+$big2, ($GraphHeight + 150 )-$big, $col);
//ImageLine( $im2, ($key2+$x+$padding_left)+$big2, 0, ($key2+$x+$padding_left)+$big2, 20, $white);
$big=$big+$faktor;
$big2=$big2-$faktor2;
}
$x=$x+100;
}
ImagePNG( $im2 );
ImageDestroy( $im2 );
?>
Das Raster, wenn Ich das kleiner mache werden die Linien höher. bei hohen Werten kleiner.
Bei großen Bilder jagt mir das Diagram oben raus, und bei kleinen Bildern sieht man kaum was, läßt sich das Raster nach der Größe eventuell berechnen?
Gruß Kevin
Zuletzt bearbeitet: