Antworten auf deine Fragen:
Neues Thema erstellen

hilfe bei bildupload script

4fox

Noch nicht viel geschrieben

hallo kann mir mal bitte jemand helfen das folgende script (hab ich von einem freund bekommen) so umzuschreiben, dass 3 versionen des hinaufgeladenen bildes gespeichert werden
1. version: originalgröße,
2. version: bild das auf eine breite von 300 pixel skaliert wird
und
3. version: bild das auf eine breite von 100 pixel skaliert wird

PHP:
<form name="upload" action="bild_hinzu.php" method="post" enctype="multipart/form-data" onsubmit="return chkUpload(); completeBild()">
    Datei: <input type="file" name="file" size="30">
    <input type="submit" name="upload" value="Hochladen">
&nbsp;
 <?php

        if (!empty($_POST['upload'])) {
            //if (upload_file($_FILES['file']['tmp_name'],$_FILES['file']['name'])==true) echo "Datei erfolgreich hochgeladen!<br>";
            if(move_uploaded_file($_FILES['file']['tmp_name'],"./images/Angebot_der_Woche/".$_FILES['file']['name'])) echo "<br><br><b><i>Datei ".$_FILES['file']['name']." erfolgreich hochgeladen! Die URL lautet:<br><br>http://www.meineseite.at/Images/",$_FILES['file']['name'],"</i></b>";
            else echo "<b><i><font color='#FF0000'>Es ist ein Fehler aufgetreten. Datei nicht hochgeladen!</font></i></b>";
        }
?>
<?php
if (!($_POST['upload'] == ""))
{

# php-Labor: Bild skalieren 
# Fehlerbericht anschalten:
error_reporting(E_ALL);

   # gd-version ermitteln fuer jegliche php-version
   # ab php 4.3 geht es einfacher mit gd_info
   # dazu: puffer einschalten
   ob_start();
   # teil der phpinfo laden
   phpinfo(8);
   $info=ob_get_contents();
   # puffer loeschen und beenden
   ob_end_clean();
   # reststring hinter gd version finden
   $info=stristr($info, 'gd version');
   # suche nach dezimalzahl
   preg_match('/\d/', $info, $gd);
   # da steht sie jetzt, die gdversion:
   $gdversion=$gd[0];
   # info und gd loeschen
   unset ($info);
   unset ($gd);
    
# Bildgroesse einlesen oder selbst festlegen:
$horizontal=300;
if(isset($_GET['x'])) {
  $h=$_GET['x'];
  # Groesse begrenzen:
  if (($h >= 20) AND ($h <=1000)) {
    $horizontal=$h;
  } 
}
$vertikal   = 200;
if(isset($_GET['y'])) {
  //$v=$_GET['y'];
  # Groesse begrenzen:
  if (($v >= 20) AND ($v <=1000)) {
    $vertikal=$v;
  } 
}
# Der Modus legt fest, ob das Bild verzerrt
# werden darf oder nicht. 1 ist unverzerrt.
# Da gibt es dann unter Umstaenden einen
# nicht besonders huebschen Rand, wenn das
# Verhaeltnis von Hoehe zu Breite nicht passt.
# Mit Modus 2 wird weder verzerrt noch
# bleibt ein Rand, dafuer wird die vorgegebene
# Bildgroesse ueberschrieben.

$mod = 3; 
if(isset($_GET['modus'])) {
  $modus=$_GET['modus'];
  # eingabe ueberpruefen:
  if (($modus == 0) OR ($modus ==1) OR ($modus ==2)) {
    $mod=$modus;
  } 
}

# Fuer Modus=2 den Anteil festlegen.
# Das ist demzufolge der Modus des
# stufenlosen unverzerrten Vergroesserns
$anteil = 1.0; 
if(isset($_GET['ant'])) {
  $ant=$_GET['ant'];
  # eingabe ueberpruefen:
  if (($ant >= 0.1) AND ($ant <=10.0)) {
    $anteil=$ant;
  } 
}

# Wir laden ein Bild von der Festplatte.
# Im array imininfo stehen interessante Informationen
# ueber das Bild. Im Element 3 steht auch noch
# drin, um welchen Bildtyp es sich handelt.
$ms="./Images/".$_FILES['file']['name'];
$imininfo = GetImageSize ($ms);
$x2=$imininfo[0];
$y2=$imininfo[1];

$imin = ImageCreateFromJPEG ($ms);



if ($mod==2) {
    $horizontal=round($x2*$anteil);
    $vertikal=round($y2*$anteil);
    $mod=0;
}


# Bild wenn moeglich im Truecolorformat erzeugen.
# Das muss man bei neuerem php/gd nehmen,
# um brauchbar Bilder zu skalieren,
# wie auch einige hier verwendete
# Funktionen. Mit verwandten Funktionen
# funktioniert es aber aehnlich bei
# aelterem php/gd, siehe unten 

if ($gdversion >=2) {
$im = imagecreatetruecolor($horizontal, $vertikal); 
} else {
$im = imagecreate($horizontal, $vertikal); 
}


# Werte fuer den simplen Fall vorgeben:
$x0=0;
$y0=0;
$xw=$horizontal;
$yw=$vertikal;


# und jetzt gucken wir, ob und wie wir 
# groesser oder kleiner machen wollen
# wenn der komplizierte Fall ohne 
# Verzerrung und mit Rand vorliegt.

if ($mod==1){

  $skalh=$horizontal/$x2;
  $skalv=$vertikal/$y2;

  if ($skalh < $skalv) {

    $y0=round(($vertikal-$y2*$skalh)/2);
    $x0=0;
    $xw=$horizontal;
    $yw=round($y2*$skalh);

  } elseif ($skalh > $skalv) {

    $x0=round(($horizontal-$x2*$skalv)/2);
    $y0=0;
    $xw=round($x2*$skalv);
    $yw=$vertikal;

  }

  # wir versuchen fuer den in diesem Fall vorhandenen
  # Rand eine eingermassen brauchbare Farbe zu ermitteln,
  # was man natuerlich auch schlauer versuchen kann:

  $ci = imagecolorat($imin, 1, $y2-1); 
  $ct = imagecolorsforindex($imin, $ci); 
  $cs = ImageColorAllocate($im,$ct["red"],$ct["green"],$ct["blue"]); 

  imagefill ($im, 1, 1, $cs);


}

# Bild skalieren:

if ($gdversion >=2) {
imagecopyresampled ($im, $imin, $x0, $y0, 0, 0, $xw, $yw, $x2, $y2);
} else {
imagecopyresized ($im, $imin, $x0, $y0, 0, 0, $xw, $yw, $x2, $y2);
}

# header senden
# Header("Content-type: image/png");

# Bild raushauen 
# ImagePNG($im);

# es ginge auch alternativ:
#Header("Content-type: image/jpeg");
#ImageJPEG($im);

# oder abspeichern als JPEG:
$file="./Images/".$_FILES['file']['name'];
ImageJPEG($im, $file);


# vorsichtshalber Speicher leeren und Bearbeitung beenden:
imagedestroy ($im);
exit;
}
?>
</form><br />

wäre echt total froh wenn mir jemand helfen könnte
 

Rakete

Nicht mehr ganz neu hier

AW: hilfe bei bildupload script

Womit genau kommst du denn nicht klar?

Immerhin hat dir dein Freund doch ein ziemlich ausführlich kommentiertes Skript überlassen ...

Ein kleiner Denkfehler ist allerdings drin.

Die Zeile
PHP:
if (!($_POST['upload'] == ""))
berücksichtigt nicht, dass move_uploaded_file() schiefgegangen sein könnte.
 
Zuletzt bearbeitet:

4fox

Noch nicht viel geschrieben

AW: hilfe bei bildupload script

mit der skalierung das funktioniert nicht so ganz wie ich das möchte und wie würde das wohl am besten gehn, dass ich die 3 versionen vom bild mit nur einem upload hinbekomme

danke für die info bezüglich fehler ;)
 

Rakete

Nicht mehr ganz neu hier

AW: hilfe bei bildupload script

Im Abschnitt

# Bildgroesse einlesen oder selbst festlegen:

musst du statt einer Zielgröße, drei definieren. In verschiedenen Varaiblen oder in ein Array oder so ...

Dann muss der Teil zwischen

# Werte fuer den simplen Fall vorgeben:

und

# header senden

so geändert werden, dass auf die vorher definierten Zielgrößen skaliert wird. Du kannst auf der einen Seite den angepassten Code drei Mal hintereinander kopieren (nicht so elegant) oder aus dem Abschnitt eine Schleife mit drei Durchläufen basteln, wobei jeder Durchlauf mit geänderten Werten (s.o.) skaliert.

Dann hast du was du möchtest, ein Upload -> drei Bilder in unterschiedlichen Größen.
 

4fox

Noch nicht viel geschrieben

AW: hilfe bei bildupload script

ich hab jetzt folgendes probiert aber es will nicht funken

PHP:
 <?php

        if (!empty($_POST['upload'])) {
            //if (upload_file($_FILES['file']['tmp_name'],$_FILES['file']['name'])==true) echo "Datei erfolgreich hochgeladen!<br>";
            if(move_uploaded_file($_FILES['file']['tmp_name'],"./images/Angebot_der_Woche/".$_FILES['file']['name'])) echo "<br><br><b><i>Datei ".$_FILES['file']['name']." erfolgreich hochgeladen! Die URL lautet:<br><br>http://www.meineseite.at/Images/",$_FILES['file']['name'],"</i></b>";
            else echo "<b><i><font color='#FF0000'>Es ist ein Fehler aufgetreten. Datei nicht hochgeladen!</font></i></b>";
        }
?>
<?php
if (!($_POST['upload'] == ""))
{

# php-Labor: Bild skalieren 
# Fehlerbericht anschalten:
error_reporting(E_ALL);

   # gd-version ermitteln fuer jegliche php-version
   # ab php 4.3 geht es einfacher mit gd_info
   # dazu: puffer einschalten
   ob_start();
   # teil der phpinfo laden
   phpinfo(8);
   $info=ob_get_contents();
   # puffer loeschen und beenden
   ob_end_clean();
   # reststring hinter gd version finden
   $info=stristr($info, 'gd version');
   # suche nach dezimalzahl
   preg_match('/\d/', $info, $gd);
   # da steht sie jetzt, die gdversion:
   $gdversion=$gd[0];
   # info und gd loeschen
   unset ($info);
   unset ($gd);
    
# Bildgroesse einlesen oder selbst festlegen:
$horizontal_mittel=300;
if(isset($_GET['x'])) {
  $h=$_GET['x'];
  # Groesse begrenzen:
  if (($h >= 20) AND ($h <=1000)) {
    $horizontal_mittel=$h;
  } 
}
$vertikal_mittel   = 225;
if(isset($_GET['y'])) {
  $v=$_GET['y'];
  # Groesse begrenzen:
  if (($v >= 20) AND ($v <=1000)) {
    $vertikal_mittel=$v;
  } 
}

$horizontal_gross=999;
if(isset($_GET['x'])) {
  $h=$_GET['x'];
  # Groesse begrenzen:
  if (($h >= 20) AND ($h <=1000)) {
    $horizontal_gross=$h;
  } 
}
$vertikal_gross   = 749;
if(isset($_GET['y'])) {
  $v=$_GET['y'];
  # Groesse begrenzen:
  if (($v >= 20) AND ($v <=1000)) {
    $vertikal_gross=$v;
  } 
}

$horizontal_klein=100;
if(isset($_GET['x'])) {
  $h=$_GET['x'];
  # Groesse begrenzen:
  if (($h >= 20) AND ($h <=1000)) {
    $horizontal_klein=$h;
  } 
}
$vertikal_klein   = 75;
if(isset($_GET['y'])) {
  $v=$_GET['y'];
  # Groesse begrenzen:
  if (($v >= 20) AND ($v <=1000)) {
    $vertikal_klein=$v;
  } 
}

# Der Modus legt fest, ob das Bild verzerrt
# werden darf oder nicht. 1 ist unverzerrt.
# Da gibt es dann unter Umstaenden einen
# nicht besonders huebschen Rand, wenn das
# Verhaeltnis von Hoehe zu Breite nicht passt.
# Mit Modus 2 wird weder verzerrt noch
# bleibt ein Rand, dafuer wird die vorgegebene
# Bildgroesse ueberschrieben.

$mod = 1; 
if(isset($_GET['modus'])) {
  $modus=$_GET['modus'];
  # eingabe ueberpruefen:
  if (($modus == 0) OR ($modus ==1) OR ($modus ==2)) {
    $mod=$modus;
  } 
}

# Fuer Modus=2 den Anteil festlegen.
# Das ist demzufolge der Modus des
# stufenlosen unverzerrten Vergroesserns
$anteil = 0.725; 
if(isset($_GET['ant'])) {
  $ant=$_GET['ant'];
  # eingabe ueberpruefen:
  if (($ant >= 0.1) AND ($ant <=10.0)) {
    $anteil=$ant;
  } 
}

# Wir laden ein Bild von der Festplatte.
# Im array imininfo stehen interessante Informationen
# ueber das Bild. Im Element 3 steht auch noch
# drin, um welchen Bildtyp es sich handelt.
$ms="./Images/Mittel/".$_FILES['file']['name'];
$imininfo = GetImageSize ($ms);
$x2=$imininfo[0];
$y2=$imininfo[1];

$imin = ImageCreateFromJPEG ($ms);



if ($mod==2) {
    $horizontal_mittel=round($x2*$anteil);
    $vertikal_mittel=round($y2*$anteil);
    $mod=0;
}


# Bild wenn moeglich im Truecolorformat erzeugen.
# Das muss man bei neuerem php/gd nehmen,
# um brauchbar Bilder zu skalieren,
# wie auch einige hier verwendete
# Funktionen. Mit verwandten Funktionen
# funktioniert es aber aehnlich bei
# aelterem php/gd, siehe unten 

if ($gdversion >=2) {
$im = imagecreatetruecolor($horizontal_mittel, $vertikal_mittel); 
} else {
$im = imagecreate($horizontal_mittel, $vertikal_mittel); 
}


# Werte fuer den simplen Fall vorgeben mittel:
$x0=0;
$y0=0;
$xw=$horizontal_mittel;
$yw=$vertikal_mittel;


# und jetzt gucken wir, ob und wie wir 
# groesser oder kleiner machen wollen
# wenn der komplizierte Fall ohne 
# Verzerrung und mit Rand vorliegt.

if ($mod==1){

  $skalh=$horizontal_mittel/$x2;
  $skalv=$vertikal_mittel/$y2;

  if ($skalh < $skalv) {

    $y0=round(($vertikal_mittel-$y2*$skalh)/2);
    $x0=0;
    $xw=$horizontal_mittel;
    $yw=round($y2*$skalh);

  } elseif ($skalh > $skalv) {

    $x0=round(($horizontal_mittel-$x2*$skalv)/2);
    $y0=0;
    $xw=round($x2*$skalv);
    $yw=$vertikal_mittel;

  }

  # wir versuchen fuer den in diesem Fall vorhandenen
  # Rand eine eingermassen brauchbare Farbe zu ermitteln,
  # was man natuerlich auch schlauer versuchen kann:

  $ci = imagecolorat($imin, 1, $y2-1); 
  $ct = imagecolorsforindex($imin, $ci); 
  $cs = ImageColorAllocate($im,$ct["red"],$ct["green"],$ct["blue"]); 

  imagefill ($im, 1, 1, $cs);


}

# Bild skalieren:

if ($gdversion >=2) {
imagecopyresampled ($im, $imin, $x0, $y0, 0, 0, $xw, $yw, $x2, $y2);
} else {
imagecopyresized ($im, $imin, $x0, $y0, 0, 0, $xw, $yw, $x2, $y2);
}

#gross
# Wir laden ein Bild von der Festplatte.
# Im array imininfo stehen interessante Informationen
# ueber das Bild. Im Element 3 steht auch noch
# drin, um welchen Bildtyp es sich handelt.
$ms="./Images/gross/".$_FILES['file']['name'];
$imininfo = GetImageSize ($ms);
$x2=$imininfo[0];
$y2=$imininfo[1];

$imin = ImageCreateFromJPEG ($ms);



if ($mod==2) {
    $horizontal_gross=round($x2*$anteil);
    $vertikal_gross=round($y2*$anteil);
    $mod=0;
}


# Bild wenn moeglich im Truecolorformat erzeugen.
# Das muss man bei neuerem php/gd nehmen,
# um brauchbar Bilder zu skalieren,
# wie auch einige hier verwendete
# Funktionen. Mit verwandten Funktionen
# funktioniert es aber aehnlich bei
# aelterem php/gd, siehe unten 


if ($gdversion >=2) {
$im = imagecreatetruecolor($horizontal_gross, $vertikal_gross); 
} else {
$im = imagecreate($horizontal_gross, $vertikal_gross); 
}

# Werte fuer den simplen Fall vorgeben gross:
$x0=0;
$y0=0;
$xw=$horizontal_gross;
$yw=$vertikal_gross;


# und jetzt gucken wir, ob und wie wir 
# groesser oder kleiner machen wollen
# wenn der komplizierte Fall ohne 
# Verzerrung und mit Rand vorliegt.

if ($mod==1){

  $skalh=$horizontal_gross/$x2;
  $skalv=$vertikal_gross/$y2;

  if ($skalh < $skalv) {

    $y0=round(($vertikal_gross-$y2*$skalh)/2);
    $x0=0;
    $xw=$horizontal_gross;
    $yw=round($y2*$skalh);

  } elseif ($skalh > $skalv) {

    $x0=round(($horizontal_gross-$x2*$skalv)/2);
    $y0=0;
    $xw=round($x2*$skalv);
    $yw=$vertikal_gross;

  }

  # wir versuchen fuer den in diesem Fall vorhandenen
  # Rand eine eingermassen brauchbare Farbe zu ermitteln,
  # was man natuerlich auch schlauer versuchen kann:

  $ci = imagecolorat($imin, 1, $y2-1); 
  $ct = imagecolorsforindex($imin, $ci); 
  $cs = ImageColorAllocate($im,$ct["red"],$ct["green"],$ct["blue"]); 

  imagefill ($im, 1, 1, $cs);


}

# Bild skalieren:

if ($gdversion >=2) {
imagecopyresampled ($im, $imin, $x0, $y0, 0, 0, $xw, $yw, $x2, $y2);
} else {
imagecopyresized ($im, $imin, $x0, $y0, 0, 0, $xw, $yw, $x2, $y2);
}

#klein
# Wir laden ein Bild von der Festplatte.
# Im array imininfo stehen interessante Informationen
# ueber das Bild. Im Element 3 steht auch noch
# drin, um welchen Bildtyp es sich handelt.
$ms="./Images/klein/".$_FILES['file']['name'];
$imininfo = GetImageSize ($ms);
$x2=$imininfo[0];
$y2=$imininfo[1];

$imin = ImageCreateFromJPEG ($ms);



if ($mod==2) {
    $horizontal_klein=round($x2*$anteil);
    $vertikal_klein=round($y2*$anteil);
    $mod=0;
}


# Bild wenn moeglich im Truecolorformat erzeugen.
# Das muss man bei neuerem php/gd nehmen,
# um brauchbar Bilder zu skalieren,
# wie auch einige hier verwendete
# Funktionen. Mit verwandten Funktionen
# funktioniert es aber aehnlich bei
# aelterem php/gd, siehe unten 


if ($gdversion >=2) {
$im = imagecreatetruecolor($horizontal_klein, $vertikal_klein); 
} else {
$im = imagecreate($horizontal_klein, $vertikal_klein); 
}

# Werte fuer den simplen Fall vorgeben:
$x0=0;
$y0=0;
$xw=$horizontal_klein;
$yw=$vertikal_klein;


# und jetzt gucken wir, ob und wie wir 
# groesser oder kleiner machen wollen
# wenn der komplizierte Fall ohne 
# Verzerrung und mit Rand vorliegt.

if ($mod==1){

  $skalh=$horizontal_klein/$x2;
  $skalv=$vertikal_klein/$y2;

  if ($skalh < $skalv) {

    $y0=round(($vertikal_klein-$y2*$skalh)/2);
    $x0=0;
    $xw=$horizontal_klein;
    $yw=round($y2*$skalh);

  } elseif ($skalh > $skalv) {

    $x0=round(($horizontal_klein-$x2*$skalv)/2);
    $y0=0;
    $xw=round($x2*$skalv);
    $yw=$vertikal_klein;

  }

  # wir versuchen fuer den in diesem Fall vorhandenen
  # Rand eine eingermassen brauchbare Farbe zu ermitteln,
  # was man natuerlich auch schlauer versuchen kann:

  $ci = imagecolorat($imin, 1, $y2-1); 
  $ct = imagecolorsforindex($imin, $ci); 
  $cs = ImageColorAllocate($im,$ct["red"],$ct["green"],$ct["blue"]); 

  imagefill ($im, 1, 1, $cs);


}

# Bild skalieren:

if ($gdversion >=2) {
imagecopyresampled ($im, $imin, $x0, $y0, 0, 0, $xw, $yw, $x2, $y2);
} else {
imagecopyresized ($im, $imin, $x0, $y0, 0, 0, $xw, $yw, $x2, $y2);
}


# header senden
# Header("Content-type: image/png");

# Bild raushauen 
# ImagePNG($im);

# es ginge auch alternativ:
#Header("Content-type: image/jpeg");
#ImageJPEG($im);

# oder abspeichern als JPEG:
$file="./Images/".$_FILES['file']['name'];
ImageJPEG($im, $file);


# vorsichtshalber Speicher leeren und Bearbeitung beenden:
imagedestroy ($im);
exit;
}
?>
 

Rakete

Nicht mehr ganz neu hier

AW: hilfe bei bildupload script

So wie es jetzt ist, kann dein dein Skript nur dann das gewünschte Ergebnis bringen, wenn $_GET['x'] und $_GET['y'] nicht gesetzt sind. Bei der Zuweisung der Größen würdest du sonst die festgelegten Werte für die einzelnen Größen immer wieder überschreiben. Hier brauchst du auch noch Varianten $_GET['x_mittel'], $_GET['x_gross'] usw ... und das Gleiche für y natürlich auch.


Tja, und dann habe ich grad gesehen ...
...das ich mich im End-Kommentar verguckt habe, bei dem Teil den ich dich vervielfältigen ließ ... :uhm:
Sorry.

Bei dir enden die Skalierungen jetzt mit imagecopyresampled() bzw. imagecopyresized(). Hiermit wird zwar das Bild skaliert, aber nur in dem Bildobjekt $im. Die Datei wird erst mit imagejpeg() geschrieben, insofern müsstet du diesen Funktionsaufruf jeder deiner Varianten hinzufügen.
So wie es jetzt ist, wird der Inhalt von $im einmal gesetzt und dann zwei Mal überschrieben und am Ende wird max. eine Datei gespeichert.

Ganz unten im Quelltext stehen die folgenden beiden Zeilen:
PHP:
$file="./Images/".$_FILES['file']['name'];
ImageJPEG($im, $file);
Die kannst du an der Stelle auskommentieren und dafür jeweils deinen drei Skalierungs-Varianten hinzufügen.

Jeweils hinter
PHP:
if ($gdversion >=2) {
imagecopyresampled ($im, $imin, $x0, $y0, 0, 0, $xw, $yw, $x2, $y2);
} else {
imagecopyresized ($im, $imin, $x0, $y0, 0, 0, $xw, $yw, $x2, $y2);
}

// Hier rein ;-)
einfügen.

Vergiss aber nicht bei der Wertzuweisung auf $file jeweils den Pfad oder den Dateinamen anzupassen, sonst hast du am Ende doch nur eine Datei.


Funktionierte es nicht, weil nur eine Datei herauskam? Oder bekommst du eine Fehlermeldung angezeigt?
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.564
Beiträge
1.538.064
Mitglieder
67.487
Neuestes Mitglied
MichaelSEivy
Oben