Bilder proportional skalieren mit Dateinamen-Abfrage

reen75

Grünschnabel
Hallo zusammen!

Bei der Überschrift denken die meisten sicher, "Benutz' die Suche"!

Leider habe ich keinen blassen Schimmer von PHP und soll nun für einen sehr, sehr guten Freund ein paar Bilder austauschen.

Das Problem:
Ich habe eine Seite, in der mehrere Bilder per FTP in einen Ordner "img" hochgeladen wurden und dann die entsprechenden Bilder über den Dateinamen, der entsprechend dem Bildtitel lauten muss, angezeigt werden sollen.

Soweit so gut, das bekomme ich grundlegend hin, indem ich eben die Bilder in das entsprechende Verzeichnis lade und dementsprechend benenne.

Jetzt hat aber die Anzeige der Bilder eine feste Größe, soweit ich das bis jetzt herausfinden konnte, im Hochformat, Ausgangsgröße 1654 x 2339 Pixel, skaliert 490 x 700 Pixel.

Leider sind nun die neuen Bilder (fast) alle im Querformat, weshalb ich nun die Bilder, bzw. die PHP-Datei so anpassen soll, dass die Bilder proportional auf eine maximale Kantenlänge von 1024 Pixel skaliert werden sollen, bzw. die Thumbnails mit 105 x 150 Pixel, dann notfalls ein Ausschnitt aus dem Querformat.

Wie gesagt habe ich davon keine Ahnung, habe auch schon versucht einige Freunde telefonisch zu erreichen, aber komme da nicht weiter.

Da die Zeit eilt und ich leider nicht so schnell die Grundzüge von PHP erlernen werde, wäre es suuuuuuper nett, wenn mir jemand von euch den Code anschauen könnte und mir da ein wenig auf die Sprünge helfen kann.

Ich weiß, ist frech, aber leider weiß ich mir momentan keinen besseren Ausweg um das Ganze hinzubekommen und da ich dem Freund Einiges verdanke, möchte ich ihm den Wunsch sehr, sehr gerne umsetzen.
eek.gif


Schonmal tausend Dank für eure Hilfe!!!!

Jetzt noch zum Code...

PHP:
<?php

$_GET['i'] = str_replace("ABC", "", $_GET['i']);

if(!file_exists('./img/'.$_GET['i'].'.jpg')) exit();

if(!$_GET['b'])
  {
  $img = ImageCreateFromJPEG('./img/'.$_GET['i'].'.jpg');
  $neu = ImageCreateTrueColor(105, 150);
  $fa =  imagecolorallocate($neu, 100, 100, 100);
  imagefill($neu, 0,0, $fa);

  imagecopyresampled($neu , $img, 0, 0, 0, 0, 105, 150, 1654, 2339);
  }
else  {
  if($_GET['rs'])
    {
    $img1 = ImageCreateFromJPEG('./img/'.$_GET['i'].'.jpg');
    $img2 = ImageCreateFromJPEG('./img/'.$_GET['i'].'rs.jpg');

    $neu = ImageCreateTrueColor(981, 700);

    imagecopyresampled($neu , $img1, 0, 0, 0, 0, 490, 700, 1654, 2339);
    imagecopyresampled($neu , $img2, 491, 0, 0, 0, 490, 700, 1654, 2339);
    }
  else  {
    $img1 = ImageCreateFromJPEG('./img/'.$_GET['i'].'.jpg');

    $neu = ImageCreateTrueColor(490, 700);

    imagecopyresampled($neu , $img1, 0, 0, 0, 0, 490, 700, 1654, 2339);
    }
  }


  Header('Content-type: image/jpeg');
  ImageJPEG($neu, '', 90);

?>


Soweit mein laienhaftes Auge das erkennen kann, ist es doch wohl so, dass die Variable "i" ausgelesen
wird (in dem Fall der Bildname) und dann darin die Bezeichnung "ABC" gelöscht/durch "" ersetzt wird.

Dann wird geprüft, ob ein Bild mit entsprechendem Dateinamen besteht und dann wird es mit imagecopyresampled auf die Größe 1654 x 2339 Pixel überprüft und dann an eine bestimmte Position in der Größe 490 x 700 Pixel platziert und ein Thumbnail im Format 105 x 150 Pixel erstellt.

Falls das Bild auch mit dem Zusatz "rs" im Dateinamen existiert, wird dieses ebenfalls angezeigt, und rechts neben das erste Bild, ohne "rs" platziert, richtig? Bei neuen Bildern, die ich hochlade, funktioniert das aber nicht?

Meine Frage ist nun, wie kann ich eine Datei, die im Querformat ist, dann abfragen (ich dachte da an den Zusatz im Dateinamen "_qf" und dann entsprechend im Quer-, statt im Hochformat anzeigen lassen?

Könnt ihr mir bitte weiterhelfen??

Viiiielen Dank!!

Grüße René
 
Leider sind nun die neuen Bilder (fast) alle im Querformat, weshalb ich nun die Bilder, bzw. die PHP-Datei so anpassen soll, dass die Bilder proportional auf eine maximale Kantenlänge von 1024 Pixel skaliert werden sollen, bzw. die Thumbnails mit 105 x 150 Pixel, dann notfalls ein Ausschnitt aus dem Querformat.
Was soll genau passieren, wenn das per $_GET['i'] übergebene Bild im Querformat vorliegt?
Kannst du bitte den gesamten Ablauf beschreiben?

Falls das Bild auch mit dem Zusatz "rs" im Dateinamen existiert, wird dieses ebenfalls angezeigt, und rechts neben das erste Bild, ohne "rs" platziert, richtig? Bei neuen Bildern, die ich hochlade, funktioniert das aber nicht?
Korrekt. Da müsste man das Formular sehen. Das Skript ist sowieso eher anfällig für Fehler, aber das lassen wir mal lieber aufgrund deines Zeitdrucks außer Augen.

Übrigens positioniert das Skript das Bild rechts nicht direkt an das linke, sondern mit einem Pixel Versatz. Das liegt daran, dass das zweite imagecopyresampled 491 als x-Position angibt, die x-Position jedoch nullbasiert ist, also 490 sein müsste.
 
Also, so richtig korrekt ist die zweite zitierte Aussage nicht. Es liegt nicht daran, ob ein Bild mit dem Zusatz „rs“ existiert, es liegt an den Werten der Parameter $_GET['b'] und $_GET['rs']. Und wie und warum die wo gesetzt werden, ist unbekannt.

Edit: Es wird auch vermutlich kein Formular geben, sondern das wird ein Skript sein, das in <img src="…"> oder dergleichen aufgerufen wird.
 
Zuletzt bearbeitet:
Zurück