Bild via PHP Dynamisch verkleinern

Hallo.
Ich möchte ein Bild via PHP verkleinern.
Ich stelle mir das ganze so vor.
Das Script soll das Bild von wowstatus.net/sbanner.php?server=562639 holen und auf 100x100 im PNG Datei Format verkleinern. Dann soll das ganze ausgegeben werden als PNG Datei so das der Browser denkt es wäre ein normales Bild.
Ist das ihrgendwie via gdlib oder anderem lösbar ?

$im = imagecreatetruecolor(100,100);
-> bild mit 100x100

dann imagecreatefrom wasauchimmer der dateityp des bildes was du resizen möchtest das zu verändernde bild laden

und dann das ganze mit imagecopyresize in das erstellte 100x100 bild einfügen (die längenmaße vom zu verändernden bild vorher ermitteln und da einfügen.

am ende das ganze mit imagepng($im) ausgeben

such einfach mal bei php.net nach den funktionen und wie du sie verwenden musst

wenn du mit den o.g. sachen kein script zusammenbekommst bastel ich dir n provisorisches ansonsten warten bis wer postet der öfter mit gdlib arbeitet

edit:
k wird doch in der Form nicht gehen

bilder von externen seiten kannst also soweit ich das richtig verstehe nicht auf bplaced seitens php bearbeiten.
geht nur mit files aufm server (also nur bilder die man z.B. erst uppt und dann mit php auf dem eigenen server bearbeitet)
was im falle dynamisch erzeugter bilder jedoch völlig sinnlos.

haut mich wenn das mit externen files öffnen doch funzt ^^

Da ich einen eigenen Linux Root besitze ist dass das kleinere Problem.
Nur ich brauch eben nen vollstädnigen Quellcode für die Datein wo ich erstellen muss.
Ich blick da nicht wirklich durch.

Hab dank des Gulli Boards es hinbekommen.
Siehe Signatur.
Für jeden der auch sowas mal brauch hier der Code.
Solltet ihr ein anderes I / O (Input / Output) Format haben einfach GIF und png zu dem ändern was ihr braucht.

[code]<?php

$PicPathIn  = "http://www.wowstatus.net/sbanner.php?server=562639";

$size       = @getimagesize($PicPathIn);
$breite     = $size[0];
$hoehe      = $size[1];
$neueBreite = 100;
$neueHoehe  = 100;

$altesBild=ImageCreateFromGIF($PicPathIn);
$neuesBild=imagecreatetruecolor($neueBreite,$neueHoehe);
imagecopyresampled($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);


header('Content-type: image/png');
imagepng($neuesBild);
imagedestroy($neuesBild);

?> [/code]

Das Problem wird dann wohl aber sein, dass alle Bilder, egal welche Auslösung, auf 100x100 Pixel “gequetscht” werden.
Da sollte man zuerst die Alte größe ermitteln, und dann das neue Bild im gleichen Seitenverhältnis erstellen.

mfg Balmung

Wie würde man das machen. Also Proportional ?

Da habe ich vor längerer Zeit mal Beispiele gebastelt:

hoffmann.bplaced.net/hilfe.php?m … dskalieren

//Edit Hoffmann war schneller, hier aber trotzdem mein beispiel

[code]<?php

$neuw = 100;
$neuh = 100;

$altw = 1024;
$alth = 768;

if($altw > $neuw || $alth > $neuh){ //Edit, thx an MadalorE, hatte ich nicht dran gedacht :stuck_out_tongue:
if($altw > $alth){
$neuh = $neuh * ($alth / $altw);
}else{
$neuw = $neuw * ($altw / $alth);
}
}else{
$neuw = $altw;
$neuh = $alth;
}
?>[/code]

$neuw und $neuh sind maximalwerte und sollten gleich sein. Wenn sie unterschiedlich sind gibts Probleme, wenn die “alt”-werte gleich sind.
So in diesem Fall sollte nach der if-abfrage in $neuh der Wert 75 stehen und in $neuw der Wert 100.

Es gibt sicherlich bessere Möglichkeiten, aber das da sollte ausreichend sein.

vom alten bild die seitenverhältnisse in relation setzen

if ($breite > $maxbreite || $hoehe > $maxhoehe) { $seitenverhältnis = $breite / $hoehe; if ($seitenverhältnis > 1) { $neueBreite = $maxbreite; $neueHoehe = $maxbreite / $seitenverhältnis; } elseif ($seitenverhältnis < 1) { $neueHoehe = $maxhoehe; $neueBreite = $maxhoehe * $seitenverhältnis; } elseif ($seitenverhältnis == 1) { $neueHoehe = $maxhoehe; $neueBreite = $maxbreite; } }

edit: is in etwa das gleiche wie bei balmung nur dasses nur resizt wenn die breite oder höhe den maxwert übersteigen.

sollte so funzen wenn du die ausmaße des zielbildes auf ne maximale quadratische fläche begrenzen willst.

nur auf die schnelle geschrieben geht bestimmt auch kürzer ^^

falls du aber nur dieses eine bild mit php anpassen wolltest is das mit dem seitenverhältnis egal, weil du hast ja die maße vom quellbild die immer gleich sind und kannst es auf deinen wert selber umrechnen.

Die Generierung auf ein Format mit gleichen Kantenlängen ist eigentlich unvorteilhaft, da praktisch alle Bilder die man macht, keine gleichen Kantenlängen haben.

Man schnippelt also immer etwas von der Bildinformation weg.

Auch vom Layout ist es am günstigsten die Bildbreite als Ansatz zu nehmen und dann danach die Bildhöhe mit dem Ratio zu verarbeiten.

Es gibt Bilder wie Screenshots wo das eine Rolle spielt, weil man ansonsten zu viel Bildinformation verliert.

Hat man immer Bilder im gleichen Format (also Bildbreite größer als Bildhöhe) sieht das schon sehr schön gleichmässig aus, was sich bei Bildern im Hochformat ziemlich ändert.

Man kann sich das mal ansehen

czarnowski.bplaced.net/index.php … pipictures

und schaue sich da mal das Album Templates an.

Hier kann man übrigens auch die Wirkung der max_execution_time von 12 Sekunden sehen, wenn man mittels Ajax Bilder überträgt und das bei einer langsamen Anbindung z.B. Modem und ISDN ran geht, da kann es sein, das manchmal kein grosses Bild gezeigt wird.

die vorschläge in den letzten 3 posts vorher machen doch auch genau das
man legt nen maximalen wert für breite und höhe fest und wenn eins von beiden überschritten wird wird, wird das bild mit den gleichen proportionen verkleinert
auf die max. breite oder höhe jenachdem welcher wert größer ist