GetImageSize - Problem mit externen Bildern

  • Themenstarter Themenstarter ByeBye 242513
  • Beginndatum Beginndatum
B

ByeBye 242513

Guten Abend,

ich habe einen Script geschrieben der automatisch die Breite und Höhe von einem Bild erkennt und diese ggf. verkleinert, wenn die Größe von 600px überschritten wird.

Ich habe ein Testbild auf dem Server mit 1024x768px (URL: img/test/1.jpg).
Wenn ich dieses Bild nun "intern" durch den Script jage funktioniert alles und es wird auf 600×450px skaliert, Beispiel:
PHP:
<?php
  $testbild = '[ img=img/test/1.jpg][ /img]';
  echo bbcode($testbild);
?>
ERGEBNIS:
Code:
<img src="img/test/1.jpg" style="width: 600px; height: 450px;" />

Sobald ich aber versuche es "extern" einzubinden, klappt der Script nicht mehr. Und das Bild wird nicht skaliert, Beispiel:
PHP:
<?php
  $testbild = '[ img=http://www.mein_domain.de/img/test/1.jpg][ /img]';
  echo bbcode($testbild);
?>
ERGEBNIS:
Code:
<img src="http://www.mein_domain.de/img/test/1.jpg" style=width: px; height: px;" />
[ B]Wie zu sehen ist werden keine Breiten- und Längenangaben ermittelt, warum?[ /B]



FUNKTIONEN / SCRIPT
PHP:
function bbcode($input) {  
  $input = preg_replace_callback("/\[img=(.*)\]\[\/img\]/Usi", 'bbcode_check_image', $input);

  return $input;
}



function bbcode_check_image($input) {
  $imageurl   = $input[1];
  $imagearray = getimagesize($imageurl);

  $max_image_width    = '600';
  $max_image_height   = '600';

  $image_width    = $imagearray[0];
  $image_height   = $imagearray[1];

  if($image_width > $max_image_width) {
    $image_width  = $max_image_width;
    $image_height = round($imagearray[1]/($imagearray[0]/$image_width));
  }

  if($image_height > $max_image_height) {
    $image_height = $max_image_height;
    $image_width  = round($imagearray[0]/($imagearray[1]/$image_height));
  }

  return '<img src="'.$imageurl.'" style="width: '.$image_width.'px; height: '.$image_height.'px";" />';
}
 
Ich kann dir nicht sagen warum aber ich habe da eine idee...
warum begrenzt du die Bilder von externen seiten nicht einfach auf z.b. 300x300 PX?
 
Es wird nicht aus dem Bild ausgelesen sondern du hast es immer Fest. Du musst nicht erst Rechnen und .......
Also ich fände es einfacher die Größe vor zu definiren wenn es Kleiner sein sollte lass es vom Benutzer einstellen da wenn du ein 50x50 bild um das 5 Fache vergrößerst kann es kommisch aussehen oder ne andere idee,
du Lädst die Bilder in ein Verzeichniss von dir (Copyright technisch schlecht)

edit: Nein so meinte ich es nicht du sollst es nur vor Definiren
 
Zuletzt bearbeitet von einem Moderator:
Ich möchte die Größe aber nicht fest definieren. Sondern nur Bilder verkleinern die größer als 600 px sind. Denn ein 50 px auf 300 px zu vergrößern siehst unter umständen ziemlich unscharf aus.

Meine Frage bezieht sich eigentlich hauptsächlich darauf, wieso es mit externen Bilder nicht funktioniert? Habe ich einen Fehler im Script? Muss ich irgendetwas spezielles hinzufügen?
 
So weit wie ich es weiss muss man dazu was in den Server config einstellen oder? also um etwas mit externen Dateine zu machen
 
Weiß jemand zufällig was ich in der Config einstellen muss bzw. ob es wirklich an der Config liegt?
 
Meine Vermutung: allow_fopen_url in der php.ini. Sicher bin ich mir aber nicht. Du könntest versuchen, mal error_reporting() und display_errors zu aktivieren:

PHP:
// Schreib mich an den Anfang des Scripts
error_reporting(E_ALL);
ini_set('display_errors', 1);

Eine URL müsste IMHO immer dafür sorgen, das eine Remote-Verbindung aufgebaut werden muss. Das kann bei deaktivierter allow_fopen_url zu Problemen führen.
 
Code:
allow_url_fopen = on

PHP:
// Schreib mich an den Anfang des Scripts
error_reporting(E_ALL);
ini_set('display_errors', 1);
Es erscheint keine Meldung. Funktioniert aber immer noch nicht...
 
Zuletzt bearbeitet von einem Moderator:
Erweiter mal deine Funktion um ein paar Debugging-Ausgaben:

PHP:
function bbcode_check_image($input) {
echo "<pre>";
  $imageurl   = $input[1];
var_dump($imageurl);
  $imagearray = getimagesize($imageurl);
var_dump($imagearray);

  $max_image_width    = '600';
  $max_image_height   = '600';

  $image_width    = $imagearray[0];
  $image_height   = $imagearray[1];

var_dump($image_width);
var_dump($image_height);

  if($image_width > $max_image_width) {
    $image_width  = $max_image_width;
    $image_height = round($imagearray[1]/($imagearray[0]/$image_width));

echo "Scaling width<br/>";
var_dump($image_width);
var_dump($image_height);
  }

  if($image_height > $max_image_height) {
    $image_height = $max_image_height;
    $image_width  = round($imagearray[0]/($imagearray[1]/$image_height));

echo "Scaling height<br/>";
var_dump($image_width);
var_dump($image_height);
  }
echo "</pre>";

  return '<img src="'.$imageurl.'" style="width: '.$image_width.'px; height: '.$image_height.'px";" />';
}
 
Zurück