img suchen und verkleinern

MsvP@habdichliebhasi

Erfahrenes Mitglied
Hi zusammen.

Ich habe eine Foren Software gebastelt.
Mir stellt sich nur gerade ein kleines Problem. Es ist möglich Bilder die auf anderen Seiten hochgeladen wurden in seinen Beitrag einzufügen.

Wenn diese Bilder allerdings sehr breit sind, zerreißen sie mein Design.
Kann ich mittels string Suche den Beitrag auslesen, herraus finden wie groß das Bild ist und ggf. ein width, dass das Bild kleiner skaliert darstellt, einfügen?

Wäre für Hilfe sehr dankbar.

Liebe Grüße
Micha
 
Hey Gumbo,

ja das kenne ich. Mein Problem ist eher, wie ich einen Link finde und komplett aus dem Beitrag rauslese.

Ich mache eine Datenbankanfrage, speichere die Ausgabe in einem String.
Beispiel:

Nehmen wir an ich habe jetzt in der dritten Spalte den Text des Beitrags, wo auch der img-Tag enthalten ist, der so ausschaut: -img- http://www.irgendeinedomain.de/img.jpg -/img-

Jetzt bräuchte ich eine Funktion die aus dem String[2] genau nach -img- und -/img- sucht und alles was dazwischen ist ausgibt. So dass ich diesen Link durch die Image-Size Anfrage schicken kann.

Wie sehe so eine Abfrage aus?

Liebe Grüße
Micha
 
PHP:
$string[ 2 ] = preg_replace_callback(
        "%-img- (http://.+) -/img-%Uis",
        create_function(
                '$url',
                'return ( !empty( $url[ 1 ] ) && $imginfo = getimagesize( $url[ 1 ] ) )
                    ? \'<img src="\' . htmlentities( $url[ 1 ] ) . \'" alt=""\'
                    . ( ( (int) $imginfo[ 1 ] < 800 ) ? \'\' : \' width="800"\' ) . \' />\'
                    : htmlentities( $url[ 1 ] );'
            ),
        $string[ 2 ]
    );

Ich hasse diese Konstrukte, da sie ohne weiteres eher schwer nachzuvollziehen sind - Hoffe, du vertraust mir einfach, dass es funktioniert ;)
 
Hach ja, so grob kann ich es schon nachvollziehen, bin ja auch kein blutiger Anfänger. Nur mit Funktionen, die ich noch nicht verwendet habe, tue ich mich halt schonmal schwer. :-P

Vielen Dank für deine Hilfe. Werde das heute Abend direkt austesten. :-)

Liebe Grüße
Micha
 
Wie müsste ich die Funktion denn anpassen, wenn ich einen direkten <img> Tag auslesen und in der Größe verändern will?

Und gibt es eine Möglichkeit, nur das erste Bild aus dem Text auszulesen und alle weiteren zu ignorieren?

Liebe Grüße
Micha
 
Ideen schon, aber keine funktionierenden Lösungen zum jetzigen Zeitpunkt.

Grundsätzlich wäre dein erster Betreff analog zu dem, was bereits vorgeschlagen wurde für die - img - Tags, nur dass der reguläre Ausdruck ein wenig anders aussieht - Sowas wie
Code:
%<img (.*)src="(.+)"(.*) />%
Match #2 (Index 1) wäre die URL, die Matches #1 und #3 sind die Sachen, die außerdem noch im Tag stehen. Die Ersetzung - rein formal - sähe so aus:
Code:
<img \1src="\2"\3 {if width > 800}width="800px"{endif} />

Deinen zweiten Betreff würde ich mit [phpf]preg_match[/phpf] und [phpf]str_replace[/phpf] lösen: Zuerst suchst du mit einem Limiter von 1 nach einem in das Dokument eingebundenen Bild, speicherst dieses in ein Array (dritter Parameter bei [phpf]preg_match[/phpf], und ersetzt diese spezielle Zeichenfolge im String durch [phpf]str_replace[/phpf] (Wieder Limiter von 1), nachdem du eventuelle Veränderungen am ersetzenden String gemacht hast.
 
Hi Danke für die Hilfe.

Ich habe es jetzt mal folgendermaßen vor:
Da ich das erste Bild was in einem Beitrag steckt gesondert darstellen will, müsste ich das raussuchen und ggf. die Größe anpassen. Das Löschen der anderen Bilder erfolgt dann ganz einfach per strip_tags.

Von der Vorgehensweise müsste ich jetzt wahrscheinlich zunächst mit preg_match() nur ein Bild heraussuchen und das danach durch preg_replace jagen um dann anschließend strip_tags durchlaufen zu lassen, auf den Rest des Textes. So dass ich letztendlich eine Variable mit dem Text und eine mit dem einzelnen verkleinerten Bild habe.

Soweit in der Theorie ;-)

Wie benutze ich denn den Match Befehl vorher bzw. wie koppel ich die Ausgabe mit dem preg_replace?

Liebe Grüße
Micha
 
Zuletzt bearbeitet:
So ich komme dem immer näher, habe jetzt schon folgendes erreicht:

PHP:
$text="hallo dies ist ein schöner Text mit einem <img src='bildchen.jpg'> Bildchen! <img src='nocheinbild.jpg'>";


$imagesuche = preg_match("%<img (.*)src='(.+)'(.*)>%", $text, $treffer);


echo"$imagesuche";

echo"$treffer[2]";


$imagesuche gibt mir eine 1 (true) zurück.
$treffer[2] gibt mir jetzt "nocheinbild.jpg" aus.

Das Problem ist nur, dass ich das erste Bild haben will. Nicht das zweite. :-(


Liebe Grüße
Micha

Ps: Habe mich gerade auch einwenig in REGEX und Reguläre Ausdrücke eingelesen, damit ich besser nachvollziehen kann, was wir hier machen. ;-)
 
Zuletzt bearbeitet:
Zurück