Bild skalieren

dsNDesign

Erfahrenes Mitglied
Hei,
ich habe folgendes vor:

Ich habe ein Bild (nicht quadratisch), also z.B. 700 x 400 px groß. Dieses möchte ich nun skalieren. Das Endprodukt soll quadratisch sein, also z.B. 200 x 200 px. Der überschüßige Teil soll also quasi abgeschnitten werden.
Wie ist sowas realisierbar? PHP, JS,...?

Freue mich über viele Tipps.

Gruß
 
Kommt ganz darauf an, was du damit vor hast. Wenn du das Bild danach abspeichern will, dann wird es was serverseitiges sein müssen. Wenn du es allerdings nur in der Form darstellen will, dann geht das sogar ohne JavaScript oder sonstige Programmiersprachen (aber es wird nicht unbedingt empfohlen Bilder per CSS zu skalieren, weil das Bandbreite verschwendet. Aber es geht.).
 
Bild mit PHP bearbeiten und dann skaliert anzeigen lassen. Oder mit dem Canvas-Element und Javascript skaliert darstellen.
 
Ich hab es jetzt so:
PHP:
$scale = GetImageSize ("Pics/test.jpg");
$breite = $scale[0];
$hoehe = $scale[1];

$neuehoehe = 50;
$neuebreite = floor($breite * ($neuehoehe / $hoehe));
$neuesbild = imagecreatetruecolor($neuebreite, $neuehoehe);
$image = imagecreatefromjpeg("Pics/test.jpg");
imagecopyresized($neuesbild, $image, 0, 0, 0, 0, $neuebreite, $neuehoehe, $breite, $hoehe);
imagejpeg($neuesbild, "Pics/neu2.jpg", 300);

$image = imagecreatefromjpeg("Pics/neu2.jpg");
$size = array(50,50);
$point = array(0,0);

$new = imagecreatetruecolor($size[0],$size[1]);
imagecopyresized($new, $image, 0,0, $point[0],$point[1],$size[0],$size[1], $size[0],$size[1]);
imagejpeg($new,"Pics/neu.jpg",100);

Jedoch speicher ich die Dateien da ja jeweils. Wie kann ich es machen, dass ich sie nur in einer Variable speicher?
 
Du meinst vermutlich, dass du sie direkt ausgibst und nicht speicherst? Aber vorher erkläre mir bitte, warum du da zwei verschiedene Bilder erstellst? Welches ist denn jetzt das, was du am Ende ausgeben willst?
 
Genau, dass mein ich.

Ich habs ganz klein wenig modiziert:

PHP:
$scale = GetImageSize ("Pics/test.jpg");
$breite = $scale[0];
$hoehe = $scale[1];

$neuehoehe = 50;
$neuebreite = floor($breite * ($neuehoehe / $hoehe));
$neuesbild = imagecreatetruecolor($neuebreite, $neuehoehe);
$image = imagecreatefromjpeg("Pics/test.jpg");
imagecopyresized($neuesbild, $image, 0, 0, 0, 0, $neuebreite, $neuehoehe, $breite, $hoehe);

$size = array(50,50);
$point = array(0,0);

$new = imagecreatetruecolor($size[0],$size[1]);
imagecopyresized($new, $neuesbild, 0,0, $point[0],$point[1],$size[0],$size[1], $size[0],$size[1]);
imagejpeg($new,"Pics/neu.jpg",100);

Beim ersten verkleiner ich das Bild, dass es auf einer Seite 50px ist. Im nächsten Schritt schneide ich es dann zu, dass beide Seiten 50 px lang sind.
 
Ich will dir nur zwei Sachen mit auf den Weg geben:
1. Du musst ein Bild nicht zwischenspeichern.
2. imagejpeg() gibt das Bild selbstständig am Bildschirm aus, wenn du keine Datei angibst, in die es speichern soll. Lass also die Pfadangabe weg und füge folgendes noch davor:
PHP:
header('Content-Type: image/jpeg');
 
Dann hat er folgendes zu meckern:

"Die Grafik "PFAD/bild.php" kann nicht angezeigt werden, da sie Fehler enthält"
 
Zurück