Grafik mit fester und flexibler Breite erstellen

Alice

Erfahrenes Mitglied
Hallo.

Ich habe folgende Frage.

Mit einem PHP-Skript werden Grafiken erstellt. In einem Verzeichniss sind mehrere hundert Grafiken. Je nach Eingabe ins Formular, werden die Grafiken wie ein Puzzle zu einer großen Grafik zusammen gebaut.

Das alles klappt auch wunderbar.

Das Problem ist das ich mit der Breite der End-Grafik nicht zufrieden bin. Ich würde gerne eine Maximal Breite eingeben, wenn die End-Grafik nicht Breit genug ist, sollen an zwei bestimmten Stellen Reserve-Grafiken eingefügt werden (1xReserve-Grafik = 1px Breit).

Ich kriege das aber leider nicht hin. Ich habe es mit "Wenn und Dann" Code versucht (ähnlich wie bei Excel) aber damit kriege ich es auch nicht hin.

Hier das PHP Skript in gekürzter Form (unnötiges gelöscht):
PHP:
<?php

// ######################################################################
// Input 1
// ######################################################################
   if (!isset($_POST['ABC1'])) {
              $_POST['ABC1'] = '';
   } 

// ######################################################################
// Input 2
// ######################################################################
   if (!isset($_POST['ABC2'])) {
              $_POST['ABC2'] = '';
   } 

// ######################################################################
// Input 3
// ######################################################################
   if (!isset($_POST['ABC3'])) {
              $_POST['ABC3'] = '';
   } 

// ######################################################################
// Input 4
// ######################################################################
   if (!isset($_POST['ABC4'])) {
              $_POST['ABC4'] = '';
   }

// ######################################################################
// Input 5
// ######################################################################
   if (!isset($_POST['ABC5'])) {
              $_POST['ABC5'] = '';
   }

// ######################################################################
// Zusammenfassen
// ######################################################################
   $Input1  = strtoupper($_POST['ABC1']);
   $Input2  = strtoupper($_POST['ABC2']);
   $Input3  = strtoupper($_POST['ABC3']);
   $Input4  = strtoupper($_POST['ABC4']).strtoupper($_POST['ABC5']);

// ######################################################################
// Output usw.
// ######################################################################
   $Input    = 'Grafik'.$Input4.'_'.$Input1.'_'.$Input2.'_'.$Input3;
   $Umlaute1 = array("Ä", "Ö", "Ü"); 
   $Umlaute2 = array("AE", "OE", "UE"); 
   $Output   = str_replace($Umlaute1, $Umlaute2, $Input);
   $Output   = htmlspecialchars($Output);

// ######################################################################
// Ordner, Dateiformaten, Präfix und Bildbreite
// ###################################################################### 
   $Ordner1      ='images/KG/';
   $Ordner2      ='KG/';
   $PFGF         ='.png';
   $total_size_x =0;

// ######################################################################
// Standard-Grafiken
// ######################################################################
   $Standard_Grafik1 = $Ordner1.'Grafik1000'.$PFGF;
   $Standard_Grafik2 = $Ordner1.'Grafik2000'.$PFGF;
   $Standard_Grafik3 = $Ordner1.'Grafik3000'.$PFGF;

// ######################################################################
// Standard-Grafik
// ###################################################################### 
   for($j=1; $j < 2; ++$j){ 
      if(file_exists($Standard_Grafik1)){
        $size = getimagesize($Standard_Grafik1);
        $im[] = array('img'     => imagecreatefrompng($Standard_Grafik1), 
                      'sizex'   => $size[0],
        ); 
        $total_size_x +=$size[0]; 
      } 
   } 

// ######################################################################
// Input1 Grafiken
// ###################################################################### 
   for($j=0, $x = strlen($Input1); $j < $x; ++$j){ 
      if(file_exists($Ordner1.$Input1[$j].$PFGF)){
        $size = getimagesize($Ordner1.$Input1[$j].$PFGF);
        $im[] = array('img'     => imagecreatefrompng($Ordner1.$Input1[$j].$PFGF), 
                      'sizex'   => $size[0],
        ); 
        $total_size_x +=$size[0]; 
      } 
   } 

// ######################################################################
// Input-4 Grafiken
// ###################################################################### 
   for($j=1; $j < 2; ++$j){ 
      if(file_exists($Ordner1.$Input4.$PFGF)){
        $size = getimagesize($Ordner1.$Input4.$PFGF);
        $im[] = array('img'     => imagecreatefrompng($Ordner1.$Input4.$PFGF), 
                      'sizex'   => $size[0],
        ); 
        $total_size_x +=$size[0]; 
      } 
   }

// ######################################################################
// Input2 Grafiken
// ###################################################################### 
   for($j=0, $x = strlen($Input2); $j < $x; ++$j){ 
      if(file_exists($Ordner1.$Input2[$j].$PFGF)){
        $size = getimagesize($Ordner1.$Input2[$j].$PFGF);
        $im[] = array('img'     => imagecreatefrompng($Ordner1.$Input2[$j].$PFGF), 
                      'sizex'   => $size[0],
        ); 
        $total_size_x +=$size[0]; 
      } 
   }

// ######################################################################
// Standard-Grafik
// ######################################################################
   for($j=1; $j < 2; ++$j){ 
      if(file_exists($Standard_Grafik2)){
        $size = getimagesize($Standard_Grafik2);
        $im[] = array('img'     => imagecreatefrompng($Standard_Grafik2), 
                      'sizex'   => $size[0],
        ); 
        $total_size_x +=$size[0]; 
      } 
   } 

// ######################################################################
// Input3 Grafiken
// ###################################################################### 
   for($j=0, $x = strlen($Input3); $j < $x; ++$j){ 
      if(file_exists($Ordner1.$Input3[$j].$PFGF)){
        $size = getimagesize($Ordner1.$Input3[$j].$PFGF);
        $im[] = array('img'     => imagecreatefrompng($Ordner1.$Input3[$j].$PFGF), 
                      'sizex'   => $size[0],
        ); 
        $total_size_x +=$size[0]; 
      } 
   }

// ######################################################################
// Standard-Grafik
// ###################################################################### 
   for($j=1; $j < 2; ++$j){ 
      if(file_exists($Standard_Grafik3)){
        $size = getimagesize($Standard_Grafik3);
        $im[] = array('img'     => imagecreatefrompng($Standard_Grafik3), 
                      'sizex'   => $size[0],
        ); 
        $total_size_x +=$size[0]; 
      } 
   } 

// ######################################################################
// Grafik erstellen und speichern
// ######################################################################
   $imend = imagecreatetruecolor($total_size_x, $size[1]); 
   $ac_x  = 0;
            foreach($im as $grafik){ 
                   imagecopy($imend, $grafik['img'], $ac_x, 0, 0, 0, imagesx($grafik['img']), imagesy($grafik['img']));
                   $ac_x+= $grafik['sizex']; 
            }
   imagepng($imend,"{$Ordner2}End-Grafik-{$Output}.png");
   $URL1  = $Ordner2."End-Grafik-{$Output}.png";
   $URL2  = $Output; 
   $size  = getimagesize($URL1); 
   $kbyte = round(filesize($URL1)/1024, 3);

?>

Um das ganze mal verständlicher zu erklären:

Derzeit ist es so:

X = Grafik (5px Breit)
O = Grafik (10px Breit)

XOOXXXXXXOXOOXX (100px)

Aber ich möchte das es 132px sind. :)

also:
X = Grafik (5px Breit)
O = Grafik (10px Breit)
| = Reserve Grafik (1px Breit)

XOO||||||||||||||||XXXXXXOXOO||||||||||||||||XX (132px)

Hätte jemand eine Idee wie ich das umsetzen kann?

Vielen Dank. :)
 
Hi

wie wärs mit Mathematik? :)
PHP:
$max_width = 132; //maximale Breite
$cur_width = 100; //aktuelle Breite
$missing = floor(($max_width - $cur_width)/2); // Du willst ja die selbe Anzahl auf beiden Seiten machen, also 132-100 (das was dir fehlt) und dann geteilt durch 2
$missing = array($missing,$missing);
if( ($missing[0] +$missing[1]) < ($max_width-$cur_width) ){ //wenn dir eine ungerade Zahl gefehlt hat (z.B 33) ist im Array zweimal 16, also wird einmal 1 hinzuaddiert.
  $missing[1]++;
}
Jetzt hast du die beiden Breiten für die jeweilige Seite in einem Array.
 
Hi timestamp. :)

vielen dank für dein antwort. wohin muss ich das denn einbauen?

die "aktuelle Breite" ist aber flexibel oder? denn die end-grafiken sind derzeit unterschiedlich breit. 100px waren nur ein beispiel.

danke.

Edit: (@Mod: Sorry für Doppelpost)

Ich habe es mehrmals versucht aber ich kriege deinen Code nicht zum laufen. Kannst du mir bitte dabei helfen?
 
Zuletzt bearbeitet:
Hi

die aktuelle Breite ist in der Tat variable, ich bin jetzt allerdings davon ausgegangen, dass sie kleiner als 130px ist. Wo du das ganze einfügst ist relativ egal, in dem array $missing werden in $missing[0] die Anzahl Füllgrafiken gespeichert, die links, in $missing[1] die, die rechts eingefügt werden sollen.Dementsprechend müsste der Schnipsel also vor dem Einsetzten der Füllgrafiken eingefügt werden.
 
Hallo timestamp. :)

Ich merke schon, du kennst dich sehr gut aus. Ich leider nicht.

Wenn ich "deinen Code" so einbaue, da er vorher gelesen wird, als die Grafiken zusammengepuzzelt werden, woher soll das Skript dan wissen wie Breit die Grafik wird (ohne Reserve-Grafiken)?
Vielleicht habe ich mangels PHP-Kentnisse auch einfach einen Denkfehler?

Könntest du mir das nicht anhand meines Codes aus dem 1. Beitrag zeigen wie ich das machen soll? :)

Edit: Die End-Grafiken (wie sie jetzt sind) erreichen nie eine Breite von über 130px. Maixmal sind es um die 125px aber es sollen 130px werden (mit Füllgrafiken). :)
 
Zuletzt bearbeitet:
Ja den Code "getimagesize()" kenne ich.

Aber das Skript weiss doch erst wie Breit die End-Grafik ist, nachdem die Grafiken verarbeitet wurden und dann ist es doch schon zu spät um Reserve-Grafiken einzusetzen. Oder?

Kannst du mein Skript lesen oder ist für dich nicht lesbar (wegen laienhaften Aufbau)?
 
Hi

hierfür würde ich wiedermal Mathe nehmen:
PHP:
$input = array("X" => 5, "O" => 7);
$width = $input["X"] * 5 + $input["O"] * 10;

edit: Hier bin ich jetzt mal für ein Beispiel davon ausgegangen, dass du 5 mal X hast, und 7 mal O. Daraus ergibt sich jetzt eine Breite von 95px. (das müsste dann cur_width in meinem vorherigen Script sein.) Dann könntest du jetzt ohne Probleme die Füllgrafiken berechnen und einsetzen wo du sie hinhaben möchtest.
 
Zuletzt bearbeitet:
Jetzt bin ich wirklich überfordert.

Das Skript (1. Beitrag) erzeugt durch User-Eingaben eine Grafik die aus mindestens 7 einzelnen Grafiken bis maximal 12 einzelnen Grafiken besteht.

Mit deinen letzten Post kann ich aber leider nichts anfangen. Ist mir zu Hoch.

Edit: Würde es helfen wenn ich dir den Link zum Skript per PN schicke?
 
mh das Thema wird wie das letzte von dir wieder über 6 Seiten gehen.....

Du wirst dich wohl intensiver mit PHP beschäftigen müssen ehe du derartige Projekte in Angriff nimmst denn es ist leider nicht Sinn und Zweck dieses Forums deine Scripte für dich zu entwickeln.
Bitte schaue dir Grundlagen Tutorials an und fange an selber zu experimentieren.
Wir geben gerne Hilfestellung aber wenn das alles zu Hoch ist musst du selber noch ein wenig Grundlagen lernen ehe du dich an schwierigeres wagst.

Tut mir Leid das ich das so sagen muss.

P.S. wenn du ein Script entwickeln lassen willst stelle eine Anfrage im Jobs Unterforum.
 
Zuletzt bearbeitet:
Zurück