Afbeelding uploaden, resizen en saven
Ontani - 19/07/2005 14:29 (laatste wijziging 19/07/2005 14:29)
-1
ik heb nu een upload script voor afbeeldingen.
nu zou ik bij het uploaden die willen resizen naar 800 x 600 als de resolutie groter zou zijn. dan die 800 x 600 of kleinere versie opslaan als image.jpg en een thumnail van 100 x 75 opslaan als image_thumb.jpg.
mijn upload script tot nu toe:
<?
session_start();
if($aSession['loggedIn'] == TRUE) {
$site_name = $_SERVER['HTTP_HOST'];
$url_dir = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']);
$url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$upload_dir = "screenshots/";
$upload_url = $url_dir."/files/";
$message ="";
function do_upload($upload_dir, $upload_url, $username) {
$temp_name = $_FILES['userfile']['tmp_name'];
$file_name = $_FILES['userfile']['name'];
$file_name = str_replace("\\","",$file_name);
$file_name = str_replace("'","",$file_name);
$ext = substr($file_name,(strpos($file_name , '.', 1)),(strlen($file_name)-strpos($file_name , '.', 1)));
echo $ext;
$file_type = $_FILES['userfile']['type'];
$file_size = $_FILES['userfile']['size'];
$result = $_FILES['userfile']['error'];
$file_url = $upload_url.$file_name;
$randInt = rand(1, 9999999999);
$file_path = $upload_dir.$randInt.$ext;
//File Name Check
if ( $file_name =="") {
$message = "Invalid File Name Specified";
return $message;
}
//File Size Check
else if ( $file_size > 512000) {
print $file_size;
$message = "The file size is over 500kB.";
return $message;
}
//File Type Check -- Prevent possible attacks
else if ( strpos($file_name,".php") !== false
|| strpos($file_name,".cgi") !== false
|| strpos($file_name,".htm") !== false
|| strpos($file_name,".inc.php") !== false
|| strpos($file_name,".phtm") !== false )
return;
else if ( strpos($file_type,"image") !== false);
else {
$message = "Sorry only image upload allowed." ;
return $message;
}
$result = move_uploaded_file($temp_name, $file_path);
$old_umask = umask(0);
if (!chmod($file_path,0777))
$message = "change permission to 755 failed.";
else
$message = ($result)?$randInt.$ext." uploaded successfully." :
"Something is wrong with uploading a file.";
$query = "INSERT INTO screenshots VALUES ('','".$randInt.$ext."','".$username."')";
$result = mysql_query($query) or die(mysql_error());
return $message;
}
if ($_FILES['userfile']) {
$resource = fopen("log.txt","a");
fwrite($resource,date("Ymd h:i:s")."UPLOAD - $_SERVER[REMOTE_ADDR]"
.$_FILES['userfile']['name']." "
.$_FILES['userfile']['type']."\n");
fclose($resource);
$message = do_upload($upload_dir, $upload_url, $aSession['username']);
print "<script>window.location.href='index.php?addScreenshot=true&message=$message'</script>";
}
else if (!$_FILES['userfile']);
else
$message = "Invalid File Specified.";
?>
<div align="center">
<font color=red><?=$_REQUEST[message]?></font>
<br>
Only images are allowed (jpg or gif). Maximum size is 500kb.
<form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post" action="index.php?addScreenshot=true">
Upload File <input type="file" id="userfile" name="userfile">
<input type="submit" name="upload" value="Upload">
</form>
</div>
<?
}
?>
<?
if ( $aSession [ 'loggedIn' ] == TRUE ) {
$site_name = $_SERVER [ 'HTTP_HOST' ] ;
$url_dir = "http://" . $_SERVER [ 'HTTP_HOST' ] . dirname ( $_SERVER [ 'PHP_SELF' ] ) ; $url_this = "http://" . $_SERVER [ 'HTTP_HOST' ] . $_SERVER [ 'PHP_SELF' ] ;
$upload_dir = "screenshots/" ;
$upload_url = $url_dir . "/files/" ;
$message = "" ;
function do_upload( $upload_dir , $upload_url , $username ) {
$temp_name = $_FILES [ 'userfile' ] [ 'tmp_name' ] ;
$file_name = $_FILES [ 'userfile' ] [ 'name' ] ;
$file_name = str_replace(" '","",$file_name);
$ext = substr($file_name,(strpos($file_name , ' . ', 1)),(strlen($file_name)-strpos($file_name , ' . ', 1)));
echo $ext;
$file_type = $_FILES[' userfile'][' type'];
$file_size = $_FILES[' userfile'][' size'];
$result = $_FILES[' userfile'][' error'];
$file_url = $upload_url.$file_name;
$randInt = rand(1, 9999999999);
$file_path = $upload_dir.$randInt.$ext;
//File Name Check
if ( $file_name =="") {
$message = "Invalid File Name Specified";
return $message;
}
//File Size Check
else if ( $file_size > 512000) {
print $file_size;
$message = "The file size is over 500kB.";
return $message;
}
//File Type Check -- Prevent possible attacks
else if ( strpos($file_name,".php") !== false
|| strpos($file_name,".cgi") !== false
|| strpos($file_name,".htm") !== false
|| strpos($file_name,".inc.php") !== false
|| strpos($file_name,".phtm") !== false )
return;
else if ( strpos($file_type,"image") !== false);
else {
$message = "Sorry only image upload allowed." ;
return $message;
}
$result = move_uploaded_file($temp_name, $file_path);
$old_umask = umask(0);
if (!chmod($file_path,0777))
$message = "change permission to 755 failed.";
else
$message = ($result)?$randInt.$ext." uploaded successfully." :
"Something is wrong with uploading a file.";
$query = "INSERT INTO screenshots VALUES (' ',' ".$randInt .$ext ." ',' ".$username ." ')";
$result = mysql_query($query) or die(mysql_error());
return $message;
}
if ($_FILES[' userfile']) {
$resource = fopen("log.txt","a");
fwrite($resource,date("Ymd h:i:s")."UPLOAD - $_SERVER[REMOTE_ADDR]"
.$_FILES[' userfile'][' name']." "
.$_FILES[' userfile'][' type']."\n");
fclose($resource);
$message = do_upload($upload_dir, $upload_url, $aSession[' username']);
print "<script>window.location.href=' index. php?addScreenshot= true& message= $message '</script>";
}
else if (!$_FILES[' userfile']);
else
$message = "Invalid File Specified.";
?>
<div align="center">
<font color=red><?= $_REQUEST [ message] ?> </font>
<br>
Only images are allowed (jpg or gif). Maximum size is 500kb.
<form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post" action="index.php?addScreenshot=true">
Upload File <input type="file" id="userfile" name="userfile">
<input type="submit" name="upload" value="Upload">
</form>
</div>
<?
}
?>
3 antwoorden
Gesponsorde links
Gerard - 19/07/2005 14:50
Ouwe rakker
Ontani, dit is niet bedoeld als een troll ofzo maar ik zie dat je nog geen effort hebt gemaakt om zelf er iets aan te doen. Wat heb je zelf al geprobeert m.b.t. GD?
Ik vind je uploadscript trouwens netjes, complimentje!
Ontani - 19/07/2005 15:14
-1
toch maar effe een vraagje wat is troll?
maar idd zoals je zegt heb geprobeerd met gd maar ik weet niet hoe je daar bijvoorbeeld bestanden mee opslaat.
dit zou bijvoorbeeld m'n viewScreenshots.php zijn:
<?php
if($_GET['image'])
{ // het is niet handig om de grootte mee te geven maar voor test doeleinden wel
//Waar komt het bestand vandaan?
$bronvanhetbestand = "screenshots/". $_GET['image'];
//De hoogte en breedte ophalen van het plaatje
$dimensions = getimagesize($bronvanhetbestand);
//Dit is de breedte die alle plaatjes krijgen
$doelbreedte = 800;
//Hoogte en breedte toekennnen aan nieuwe variabelen
$bronbreedte = $dimensions[0];
$bronhoogte = $dimensions[1];
//De nieuwe hoogte berekenen aan de gegevens van het oude plaatje en de doel breedte
$doelhoogte = ($bronhoogte * $doelbreedte) / $bronbreedte;
//De hoogte, als het nodig is, afronden
$doelhoogte = round($doelhoogte, 0);
//Zeggen dat dit bestand een plaatje is
header('content-type: image/jpeg');
//Het plaatje inlezen in de variabele $image
$image = imagecreatefromjpeg($bronvanhetbestand);
//een nieuw klein plaatje maken met de gewenste grootte
$destination = imagecreatetruecolor($doelbreedte, $doelhoogte);
//Het nieuwe plaatje vullen met verkleinde plaatje
imagecopyresampled($destination, $image, 0, 0, 0, 0, $doelbreedte, $doelhoogte, $bronbreedte, $bronhoogte);
//Het plaatje weergeven
imagejpeg($destination);
//Het bronplaatje verwijderen
imagedestroy($image);
//Het doelplaatje verwijderen
imagedestroy($destination);
}
else
{
$upload_dir = "screenshots/";
$handle=opendir($upload_dir);
$filelist = "";
while ($file = readdir($handle)) {
if(!is_dir($file) && !is_link($file)) {
$filelist .= "<br><a href='viewScreenshot.php?image=$file' target='_blank'>".$file."</a>";
}
}
echo $filelist;
}
?>
<?php
if ( $_GET [ 'image' ] )
{ // het is niet handig om de grootte mee te geven maar voor test doeleinden wel
//Waar komt het bestand vandaan?
$bronvanhetbestand = "screenshots/" . $_GET [ 'image' ] ;
//De hoogte en breedte ophalen van het plaatje
//Dit is de breedte die alle plaatjes krijgen
$doelbreedte = 800 ;
//Hoogte en breedte toekennnen aan nieuwe variabelen
$bronbreedte = $dimensions [ 0 ] ;
$bronhoogte = $dimensions [ 1 ] ;
//De nieuwe hoogte berekenen aan de gegevens van het oude plaatje en de doel breedte
$doelhoogte = ( $bronhoogte * $doelbreedte ) / $bronbreedte ;
//De hoogte, als het nodig is, afronden
$doelhoogte = round ( $doelhoogte , 0 ) ;
//Zeggen dat dit bestand een plaatje is
header ( 'content-type: image/jpeg' ) ;
//Het plaatje inlezen in de variabele $image
$image = imagecreatefromjpeg( $bronvanhetbestand ) ;
//een nieuw klein plaatje maken met de gewenste grootte
$destination = imagecreatetruecolor( $doelbreedte , $doelhoogte ) ;
//Het nieuwe plaatje vullen met verkleinde plaatje
imagecopyresampled( $destination , $image , 0 , 0 , 0 , 0 , $doelbreedte , $doelhoogte , $bronbreedte , $bronhoogte ) ;
//Het plaatje weergeven
imagejpeg( $destination ) ;
//Het bronplaatje verwijderen
imagedestroy( $image ) ;
//Het doelplaatje verwijderen
imagedestroy( $destination ) ;
}
else
{
$upload_dir = "screenshots/" ;
$filelist = "" ;
$filelist .= "<br><a href='viewScreenshot.php?image=$file ' target='_blank'>" . $file . "</a>" ;
}
}
}
?>
Ontani - 19/07/2005 15:28
-1
het is me gelukt met de volgende code:
<?php
function miniature($pict, $dest_pict){
$handle = @imagecreatefromjpeg($pict);
$x=imagesx($handle);
$y=imagesy($handle);
if($x > $y){
$max = $x;
$min = $y;
}
if($x <= $y){
$max = $y;
$min = $x;
}
$size_in_pixel = '100';
$rate = $max/$size_in_pixel;
$final_x = $x/$rate;
$final_y = $y/$rate;
if($final_x > $x) {
$final_x = $x;
$final_y = $y;
}
$final_x = ceil($final_x);
$final_y = ceil($final_y);
$black_picture = imageCreatetruecolor($final_x,$final_y);
imagefill($black_picture,0,0,imagecolorallocate($black_picture, 255, 255, 255));
imagecopyresampled($black_picture, $handle, 0, 0, 0, 0,$final_x, $final_y, $x, $y);
if(!@imagejpeg($black_picture,$dest_pict, $size_in_pixel))
imagestring($black_picture, 1, $final_x-4, $final_y-8, ".", imagecolorallocate($black_picture,0,0,0));
//The number is the quality of the result picture
imagejpeg($black_picture,'', '100');
imagedestroy($handle);
imagedestroy($black_picture);
}
$pict = "screenshots/932623101.jpg";
$dest_pict = "screenshots/932623101_thumb.jpg";
miniature($pict, $dest_pict);
?>
<?php
function miniature( $pict , $dest_pict ) {
$handle = @ imagecreatefromjpeg( $pict ) ;
$x = imagesx( $handle ) ;
$y = imagesy( $handle ) ;
if ( $x > $y ) {
$max = $x ;
$min = $y ;
}
if ( $x <= $y ) {
$max = $y ;
$min = $x ;
}
$size_in_pixel = '100' ;
$rate = $max / $size_in_pixel ;
$final_x = $x / $rate ;
$final_y = $y / $rate ;
if ( $final_x > $x ) {
$final_x = $x ;
$final_y = $y ;
}
$final_x = ceil ( $final_x ) ; $final_y = ceil ( $final_y ) ;
$black_picture = imageCreatetruecolor( $final_x , $final_y ) ;
imagefill( $black_picture , 0 , 0 , imagecolorallocate( $black_picture , 255 , 255 , 255 ) ) ;
imagecopyresampled( $black_picture , $handle , 0 , 0 , 0 , 0 , $final_x , $final_y , $x , $y ) ;
if ( !@ imagejpeg( $black_picture , $dest_pict , $size_in_pixel ) )
imagestring( $black_picture , 1 , $final_x - 4 , $final_y - 8 , "." , imagecolorallocate( $black_picture , 0 , 0 , 0 ) ) ;
//The number is the quality of the result picture
imagejpeg( $black_picture , '' , '100' ) ;
imagedestroy( $handle ) ;
imagedestroy( $black_picture ) ;
}
$pict = "screenshots/932623101.jpg" ;
$dest_pict = "screenshots/932623101_thumb.jpg" ;
miniature( $pict , $dest_pict ) ;
?>
Gesponsorde links
Dit onderwerp is gesloten .