Bilder mit php skalieren

Hallo bplaced-Community,

ich habe ein Problem:

Ich möchte ein Bildupload in meine Seite integrieren und Bilder die größer als 430px323px sind auf diese Größe skalieren. Natürlich sollte das Verhältnis beider Seiten erhalten bleiben, also wenn das Bild z.B. 500x300 hat, das es dann nicht so skaliert wird -> 430x323 sondern 430258. Desweiteren sollen nur .jpg Bilder zugelassen sein und das skalierte Bild soll auf dem Server in ein bestimmtes Verzeichnis gespeichert werden. Wie mache ich das?
Hab zwar schon einige kostenlose Scripts im Internet gefunden, möchte aber auch gerne wissen wie das ganze funktioniert.

MfG

Amityville

Moin,

nun zu einem musst du dir die benötigen Infos über das Bild holen (Breite, etc.)
Danach wird es i.d.R. ein neues Bild erzeugt mit imagecopyresized(), welches dann abgespeichert wird.

Im Prinzip benötigst du nur ein simples Thumbnailscript.

MfG
myPages

:motz: Wahh, ich bekomm das einfach nicht gebacken.

Also ich hab jetzt ein Formular

<form method="POST" enctype="multipart/form-data" action="addpicture.php">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
<input type="file" name="picture">
</form>

Wie bekomm ich das jetzt gebacken, dass die Datei überprüft wird auf folgende Faktoren:

  • Dateityp (darf nur .jpg sein -> sonst fehlermeldung)
  • Dateigröße (sollte 3 mb nicht überschreiben, um die bplaced-server zu schonen)
  • width + height (sollte die breite größer als 430px sein oder die höhe größer als 430 soll das bild im verhältnis skalliert werden)

ich komm da einfach nicht weiter :frowning:

mfg

Moin,

getimagesize() ist das, was du suchst :smiley:

MfG
myPages

Naja, fast. Jetzt kann ich schonmal die Seitenlängen auslesen.
Jetzt fehlt aber noch des skalieren.

Und ein weiteres Problem:

// Datei 1
<form method="POST" enctype="multipart/form-data" action="bildtest.php">
<input type="file" name="dopropic">
</form>

// Datei 2

$bild = $_POST['dopropic'];

$info = getimagesize ( $bild );

echo 'Bildbreite: ' . $info[0] . '<br>'; 
echo 'Bildhöhe: ' . $info[1] . '<br>'; 
echo 'Grafik-Typ: ' . $info[2] . '<br>'; 
echo 'HTML-Zeichenkette: ' . $info[3]; 

Wenn ich $bild = “images/testbild.png”; setze bekomm ich die richtigen ergebnisse bei $bild = $_POST[‘dopropic’]; bekomm ich keine werte

warum


$image=$_FILES["image"];
$x=430;
$y=250;

if(!file_exists($image['tmp_name']))  die("Internal Error!");

$info=getimagesize($image['tmp_name']);
if($info[2] != IMAGETYPE_JPEG )
   die("Falscher Typ!");

$x0=$info[0];
$y0=$info[1];

if($x0/$y0*$y < $x)
{
   $x=$x0/$y0*$y;
   $y=$y0/$x0*$x;
}
else
{
   $y=$y0/$x0*$x;
   $x=$x0/$y0*$y;
}

$h0=imagecreatefromjpeg($image['tmp_name']);
$h1=imagecreatetruecolor($x, $y);

if(!imageCopyResized($h1, $h0, 0, 0, 0, 0, $x, $y, $x0, $y0))
	die("Interner Fehler!");

imagedestroy($h0);
header("content-type: image/jpeg");
imagejpeg($h1);

so ungefähr…

Meine Bemühungen zum Thema:

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

Es hängt zum einen vom Format ab, dann aber auch von den
Anforderungen, ob und wenn wie das Seitenverhältnis erhalten
bleiben soll. Das entsprechende SVG-Attribut bietet jedenfalls
systematisch alle Möglichkeiten an. Kann man dann auch
sinngemäß auf ein PHP-Skript übertragen, welches Pixelgraphik
skalieren soll.

in nem form enctype ruf ich die felder also mit $_FILE[‘datei_name’]; auf?

muss ich dann $_FILE[‘dopropic’]; nehmen wenn bei mir das heißt :slight_smile:

jup :smiley:

Danke für die ganzen Antworten, das Script läuft jetzt einigermaßen :slight_smile:
Jetzt noch eine Frage: Wie kann ich dann das Bild in ein Verzeichnis auf dem Server speichern?

EDIT: habs rausgefunden mit imagejpeg() :unamused: