 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
28.01.2007, 18:26
|
#1
|
|
TP-Moderator
Registriert seit: Mar 2006
|
JPEG-Bilder hochladen und in Größe reduzieren
Hallo liebe TPler,
1.) das nachfolgende php-script habe ich als thumb.php auf meinen webspace geladen uind im Browser aufgerufen. Einige jpeg Bilder hatte ich im selben Verzeichnis beigelegt. Aber irgendwie funktioniert es nicht (bereits rechte datei + verzeichnis auf chmod777 gesetzt). Ich muss dazu sagen, das ich ein absoluter Neuling in php bin!
2.) Ebenfalls möchte ich das Script um eine Upload-Funktion ergänzen, somit ein input Feld und einen Button zum Hochladen einer Bilddatei in die Seite einbinden. Falls das Bild breiter als 500 Pixel ist soll es auf diesen Wert verkleinert werden und weiterhin ein verkleinertes Bild als Thumbnail erzeugt werden.
Habt ihr einen Tipp für mich was ich zu 1) falsch gemacht habe. Über einen Code-Schnippsel zu 2) würde ich mich freuen. Vorab vielen Dank.
PHP-Code:
<?php
$image = $_GET["image"];
header("Content-type: image/jpeg");
$scale = 3; // Ein Drittel
$size = getimagesize($image);
$width = round($size[0]/$scale);
$height = round($size[1]/$scale);
$src = imagecreatefromjpeg($image);
$dest = imagecreatetruecolor($width,$height);
imagecopyresampled($dest,$src,0,0,0,0,$width,$height,$size[0],$size[1]);
imagejpeg($dest);
imagedestroy($dest);
imagedestroy($src);
?>
__________________
Gruß HMV
|
|
|
28.01.2007, 19:45
|
#2
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Kaiserslautern
|
Hallo ngc4594
Im Anhang ist mal ein funktionierendes Script das Du als Basis benutzen kannst. Es bietet einfach nur ein Uploadfeld mit dem Du ein Bild hochladen kannst. Das Bild wird dann auf dem Server in's Verzeichnis verschoben in dem auch das Script liegt. Dann wird es auf 500px verkleinert und eine Kopie erstellt, wobei diese Kopie dann zum Thumbnail gemacht wird (mit dem Prefix t_ für Thumbnail).
Wie gesagt soll das nur als Basis dienen und ist nicht gedacht das Du es sofort online einsetzen sollst. Es fehlen z.B. noch Abfragen ob überhaupt ein Bild hochgeladen wurde; Erweiterungen für mehrere Uploadfelder; Anpassbare Pfade; usw.
Bei der Datei muss noch das .txt entfernt werden, weil man keine .php hochladen darf.
__________________
#.Viele Grüße, Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Geändert von Rizzo (28.01.2007 um 23:29 Uhr).
|
|
|
28.01.2007, 20:47
|
#3
|
|
TP-Moderator
Registriert seit: Mar 2006
|
Andreas,
das sieht verdammt gut aus. Vielen Dank für das Script und dein Hilfe. Ich werde das gleich mal ausprobieren und testen! 
__________________
Gruß HMV
|
|
|
28.01.2007, 23:32
|
#4
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Kaiserslautern
|
Keine Ursache. Ich habe die angehängte Datei ausgetauscht, weil der Funktionsaufruf mal Groß und mal Klein geschrieben war. Falls also die erste Datei nicht funktioniert hat, lad dir noch mal die korrigierte Version runter.
__________________
#.Viele Grüße, Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
|
|
|
30.01.2007, 12:11
|
#5
|
|
TP-Moderator
Registriert seit: Mar 2006
|
Hallo,
hätte noch eine Bitte. Das von Rizzo gepostete Script möchte ich mit einer Protokolldatei kombinieren. D.h. der Name der upgeloadeten Datei, das Datum und die E-Mail Adresse des Uploaders möchte ich in eine Txt-Datei schreiben.
Bekomme jetzt allerdings eine Fehlermeldung: Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in upload.php on line 68
Im folgenden Code habe ich die Stellen rot markiert, die ich ergänzt habe. Bitte Nachsicht für die grauenhaften Gehversuche von mir in PHP. Könnte mir bitte jemand helfen!
Code:
<?php
function BildScale( $Grafikdatei, $ThumbnailBreite ) {
$Bilddaten = getimagesize( $Grafikdatei );
$OriginalBreite = $Bilddaten[0];
$OriginalHoehe = $Bilddaten[1];
if( $OriginalBreite < $ThumbnailBreite ) {
$ThumbnailBreite = $OriginalBreite;
}
$Skalierungsfaktor = $OriginalBreite/$ThumbnailBreite;
$ThumbnailHoehe = intval( $OriginalHoehe/$Skalierungsfaktor );
$Originalgrafik = imagecreatefromjpeg( $Grafikdatei );
$Thumbnailgrafik = imagecreatetruecolor( $ThumbnailBreite, $ThumbnailHoehe );
imagecopyresampled( $Thumbnailgrafik, $Originalgrafik, 0, 0, 0, 0, $ThumbnailBreite, $ThumbnailHoehe, $OriginalBreite, $OriginalHoehe );
imagejpeg( $Thumbnailgrafik, $Grafikdatei, 80 );
imagedestroy( $Originalgrafik );
imagedestroy( $Thumbnailgrafik );
}
function OutputUpload($_POST,$_FILES) {
global $PictureDirName;
// Wenn das Formular abgeschickt wurde
if( isset( $_POST['submit'] ) ) {
$umaskold = umask( 0 );
// Falls die Datei groesser 0 Byte ist
if( $_FILES['bild']['size'] > 0 ) {
// Datei verschieben und bei Misserfolg Fehler ausgeben
if( !@move_uploaded_file( $_FILES['bild']['tmp_name'], $_FILES['bild']['name'] ) ) {
echo 'Konnte die Datei nicht kopieren!';
} else {
// Bildgroesse aendern (500px maximal Breite)
BildScale( $_FILES['bild']['name'], 500 );
// Bild kopieren um das Thumbnail zu erstellen
if( !@copy( $_FILES['bild']['name'], "t_" .$_FILES['bild']['name'] ) ) {
echo 'Konnte die Thumbnail-Datei nicht kopieren!';
} else {
BildScale( "t_".$_FILES['bild']['name'], 150 );
}
}
// CHMOD setzen damit man das Bild per FTP loeschen kann
@chmod( $_FILES['bild']['name'], 0755 );
@chmod( "t_" .$_FILES['bild']['name'], 0755 );
// Dateien verschieben
rename($_FILES['bild']['name'], $PictureDirName."/".$_FILES['bild']['name']);
rename("t_".$_FILES['bild']['name'], $PictureDirName."/t_".$_FILES['bild']['name']);
// Protokolldatei erstellen
$fp = fopen("$PictureDirName/bildlog.txt", "a");
fwrite($fp, ".$_FILES['bild']['name']");
fwrite($fp, "date("Y-F-l - H:i:s")");
fwrite($fp, "['email']['name']");
fclose($fp);
// Ende Protokolldatei
}
umask( $umaskold );
}
echo "<form action=".$_SERVER['PHP_SELF']." method='post' enctype='multipart/form-data' name='uploadform'>";
echo "<input type='text' name='email'><br/>";
echo "<input type='file' name='bild'> ";
echo "<input type='submit' name='submit' value='Bild hochladen'>";
echo "</form><br/><br/>";
}
?>
__________________
Gruß HMV
Geändert von His.Master's.Voice (30.01.2007 um 12:15 Uhr).
|
|
|
30.01.2007, 19:43
|
#6
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Hi Uwe,
Du hast versucht, das Schema durchzuziehen. Dabei bist Du über die Anführungszeichen gestolpert.
"...$var..."
Die Anführungszeichen kennzeichnen einen String. Eventuelle variablen werden durch ihren Inhalt ersetzt.
PHP-Funktionen dürfen darin nicht vorkommen, die werden nicht ausgeführt.
Also:
PHP-Code:
// Protokolldatei erstellen
$fp = fopen("$PictureDirName/bildlog.txt", "a");
fwrite($fp, $_FILES['bild']['name']);
fwrite($fp, date("Y-F-l - H:i:s"));
fwrite($fp, $_POST['email'].' '.$_POST['name']); # ich nehme an das das aus $_POST kommt
fclose($fp);
// Ende Protokolldatei
|
|
|
30.01.2007, 20:10
|
#7
|
|
TP-Moderator
Registriert seit: Mar 2006
|
Oh mann, ich hab alles in "....." als String gesetzt. Das hätte ich noch von Turbo Pascal wissen müssen - naja ist schon ziemlich lange her.
St@eff.en, vielen Dank für die Hilfe! 
__________________
Gruß HMV
|
|
|
01.02.2007, 16:38
|
#8
|
|
TP-Member
Registriert seit: Aug 2005
|
Hallo,
ich häng mich hier mal kurz ran weil ich ein ähnliches Problem habe.
Bei mir gehts auch um Upload und Resize:
Ich hab mich jetzt mal soweit vorgekämpft, dass eigentlich beides
unabhängig voneinander funktioniert!
Zuerst der Upload Code:
PHP-Code:
<form enctype="multipart/form-data" action="#" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="3000000">
Send this file: <br>
<input name="userfile" type="file"><br>
<input type="submit" name="senden" value="upload">
</form>
<?php
//Deklaration der gültigen mimetypen
$mimearray=array("image/gif", "image/jpeg", "image/pjpeg","image/x-png","image/png");
//Upload verzeichnis
$uploaddir = 'graphics/';
//Prüfen ob Formular gesendet wurde
if($_POST['senden']==true){
// Prüfung auf Gültigkeit des Vordeklarierten MimeTyps
if(in_array($_FILES['userfile']['type'],$mimearray))
{
// dateiupload
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {
echo "<span class=\"style4\">Datei ist gültig und wurde erfolgreich hochgeladen. <br>Debugginginfo:\n";
echo "<br>";
echo "Name: ".$_FILES['userfile']['name']."<br>";
echo "Size: ".$_FILES['userfile']['size']."<br>";
echo "Mime: ".$_FILES['userfile']['type']."<br>";
}
else{
// Fehler beim Dateiupload
print "Fehler beim Dateiupload";
}
}else{
//Fehlermeldung wenn Datei nicht den vordeklarierten MimeTypes entspricht
echo $_FILES['userfile']['name']." - ".$_FILES['userfile']['type']." <br>ist nicht für den Upload gestattet";
}
}
hier der resize:
PHP-Code:
$src = $userfile;
$size = getImageSize($src);
$target = "resize.jpg";
$quality = "90";
$width = $size[0];
$height = $size[1];
$max_width = 50;
if ($width > $max_width)
{
$convert = $max_width/$width;
$dest_width = $max_width;
$dest_height = ceil($height*$convert);
echo "<span class=\"style4\"> größe geändert!</span><br>";
echo "$dest_width<br>";
echo "$dest_height<br>";
echo "$target";
}
else
{
$dest_width = $src_width;
$dest_height = $src_height;
}
$dst_img = imagecreatetruecolor($dest_width,$dest_height);
imagecopyresampled($dst_img, $src, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height);
imagejpeg($dst_img, "$target", $quality);
jetzt versteh ich nich ganz wie das Bild mit der "resize" Version upgeloaded werden kann
Also ich will erst die Bildgröße ändern und dann uploaden!
Ich vermute ja, dass es über die Funktion
PHP-Code:
move_uploaded_file()
funktionieren müsste... aber bekomm es einfach nich gebacken
danke für die Hilfe
Tzetze
|
|
|
01.02.2007, 17:39
|
#9
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Kaiserslautern
|
Die Funktion move_uploaded_file() verschiebt eine bereits hochgeladene Datei aus dem temporären Ordner auf dem Server in ihren Zielordner. Du kannst keine Datei erst resizen und dann hochladen, es sei denn Du machst das manuell mit einem Grafikprogramm. PHP ist eine Sprache die serverseitig ausgeführt wird - es müssen also erst mal Dateien zum Server übertragen werden, damit ein resize statt finden kann.
Ich würde empfehlen, daß Du dich hier im Forum etwas umschaust, denn gerade dieses Thema wurde hier schon sehr sehr oft besprochen und erklärt. Ansonsten einfach das Script runterladen das ich oben gepostet habe und den Quelltext studieren. Das meiste ist kommentiert, so daß es einfach sein sollte zu verstehen was da vor sich geht.
__________________
#.Viele Grüße, Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Geändert von Rizzo (01.02.2007 um 17:41 Uhr).
|
|
|
01.02.2007, 18:07
|
#10
|
|
TP-Member
Registriert seit: Aug 2005
|
kk, das war wohl ein Denkfehler!
trotzdem danke
|
|
|
09.02.2007, 16:39
|
#11
|
|
TP-Moderator
Registriert seit: Mar 2006
|
EDIT: Hat sich bereits erledigt.
__________________
Gruß HMV
Geändert von His.Master's.Voice (11.02.2007 um 12:44 Uhr).
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
| | |