04. februar 2004 - 18:45
Der er
29 kommentarer og 1 løsning
Upload og resize
Hejsa, Er der nogle der har et script liggende, eller et link til en artikkel? (Har kigget på hotscripts.com) Har brug for at uploaded (og resize) billeder.
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
04. februar 2004 - 21:01
#1
Jeg har et lille script her:
------------
filform.html
------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>File Upload - Thumb</title>
<style type="text/css">
body {
background: #a0ccff;
color: #ca3045;
font-weight: bold;
text-align: center;
}
.file {
background: #aadeff;
}
</style>
</head>
<body>
<h3>Fil Upload</h3>
<form action="thumb.php" method="post" enctype="multipart/form-data">
<table width="400" border="0" cellpadding="2" cellspacing="0">
<tr>
<td>
Fil til upload:
</td>
<td>
<input class="file" type="file" name="upfile" />
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="Send Fil" />
</td>
</tr>
</table>
</form>
</body>
</html>
---------
thumb.php
---------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>File Upload - Thumb</title>
<style type="text/css">
body {
background: #a0ccff;
color: #ca3045;
font-weight: bold;
font-size: x-large;
text-align: center;
}
.file {
background: #aadeff;
}
</style>
</head>
<body>
<?
$uploaddir = "uploads/";
$maxsize = 100;
if (isset($_POST['submit']) && $_POST['submit'] == "Send Fil") {
$source = $_FILES['upfile']['tmp_name'];
if (is_uploaded_file($source)) {
if (tjektype($_FILES['upfile']['type'])) {
$dest = $uploaddir . $_FILES['upfile']['name'];
$dest = tjekfil($dest);
if (move_uploaded_file($source, $dest)) {
thumb($dest, $maxsize);
echo "Upload ok!";
} else {
echo "No Upload!";
}
} else {
echo "Denne filtype er ikke tilladt at uploade!";
}
} else {
echo "Ulovlig handling!";
}
}
echo "<p><img src='".$dest."' alt='thumbnail' /></p>";
function Thumb($sourcefile, $size) {
$type = exif_imagetype($sourcefile);
if ($type == IMAGETYPE_PNG) {
$im = imageCreateFromPNG($sourcefile);
} elseif ($type == IMAGETYPE_JPEG) {
$im = imageCreateFromJPEG($sourcefile);
}
$source_x = imagesx($im);
$source_y = imagesy($im);
$delta = $size/max($source_x, $source_y);
$dest_x = round($source_x*$delta);
$dest_y = round($source_y*$delta);
$target_id = imagecreatetruecolor($dest_x, $dest_y);
imagecopyresampled($target_id,$im,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y);
if ($type == IMAGETYPE_PNG) {
imagePNG($target_id, $sourcefile);
} elseif ($type == IMAGETYPE_JPEG) {
imageJPEG($target_id, $sourcefile);
}
}
function tjektype($type) {
$tilladt = array('image/x-png', 'image/png', 'image/pjpeg', 'image/jpeg');
if(!in_array($type, $tilladt)) {
return false;
}else{
return true;
}
}
function tjekfil($filnavn) {
$i = 0;
$arr = explode(".", $filnavn);
$ext = array_pop($arr);
$navn = implode(".", $arr);
while (is_file($filnavn)) {
$i++;
$filnavn = $navn . "." . sprintf("%03u", $i) . "." . $ext;
}
return $filnavn;
}
?>
</body>
</html>
04. februar 2004 - 21:01
#2
Her er et lille resize script:
<?php
$pic = "evt/sti/billede.jpg"; // Originalt billede
$thumb = "evt/sti/billede_thumb.jpg"; // Ønsket miniature billede
Thumb($pic, $thumb); // Kald funktion
function Thumb($sourcefile, $targetfile) {
$size = 80; // Max størrelse (pixler)
$source_id = imageCreateFromJPEG($sourcefile);
$source_x = imagesx($source_id);
$source_y = imagesy($source_id);
$delta = $size/max($source_x, $source_y);
$dest_x = round($source_x*$delta);
$dest_y = round($source_y*$delta);
$target_id=imagecreatetruecolor($dest_x, $dest_y);
imagecopyresampled($target_id,$source_id,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y);
imagejpeg($target_id,$targetfile,100);
}
?>
www.webcafe.dk har en god upload tutorial inklusiv et script, de virker fint sammen.
05. februar 2004 - 13:00
#3
Detox; hvor angiver du størrelsen på det nye billede? Dit script ændre billedet inden upload, ik ?
06. februar 2004 - 08:12
#4
har et problem. Billedet bliver ikke uploaded, men den poster ikke nogen fejl. Mappen er sat til 777. Nogen ide om hvad der kan være galt?
06. februar 2004 - 09:36
#5
Jeg har har sat en "fil form" ind i min eksisterende form, men der er ikke noget der hedder "class" fra standard. Et par spørgsmål: <input class="file" type="file" name="upfile" /> Hvad betyder "class="file"? Du har sat value til "Send fil", kan den ikke ændres? Og vil det have inflydelse på dit script?
07. februar 2004 - 08:15
#6
Googolplex: Jeg har brug for at reseize før den uploader billedet.
07. februar 2004 - 18:44
#7
Ok :) Du kan bare ændre 'Send fil', det er uden betydning.
07. februar 2004 - 18:46
#8
class="file" er bare til dit stylesheet, hvis du har defineret en class for dine input-felter, ellers kan du bare fjerne den.
07. februar 2004 - 19:45
#9
Har du stadig problemer? Hvis du ændrer: 'Send fil' skal du gøre det begge steder: <input type="submit" name="submit" value="Send Fil" /> if (isset($_POST['submit']) && $_POST['submit'] == "Send Fil") {
07. februar 2004 - 21:05
#10
har fået upload til at virke, højden bliver automatisk 150px. Vil gerne have dette tændet til 150px i bredden. Er det noget du kan hjælpe med detox? Dette er mit nuværende stript: //Upload functions START function Thumb($sourcefile, $size) { $ext = pathinfo($_FILES["upfile"]["name"]); if (strtolower($ext["extension"]) == "png") { $im = imageCreateFromPNG($sourcefile); } elseif (strtolower($ext["extension"]) == "jpeg" || strtolower($ext["extension"]) == "jpg") { $im = imageCreateFromJPEG($sourcefile); } $source_x = imagesx($im); $source_y = imagesy($im); $delta = $size/max($source_x, $source_y); $dest_x = round($source_x*$delta); $dest_y = round($source_y*$delta); $target_id = imagecreatetruecolor($dest_x, $dest_y); imagecopyresampled($target_id,$im,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y); if (strtolower($ext["extension"]) == "png") { imagePNG($target_id, $sourcefile); } elseif (strtolower($ext["extension"]) == "jpeg" || strtolower($ext["extension"]) == "jpg") { imageJPEG($target_id, $sourcefile); } } function tjektype($type) { $tilladt = array('image/x-png', 'image/png', 'image/pjpeg', 'image/jpeg'); if(!in_array($type, $tilladt)) { return false; }else{ return true; } } function tjekfil($filnavn) { $i = 0; $arr = explode(".", $filnavn); $ext = array_pop($arr); $navn = implode(".", $arr); while (is_file($filnavn)) { $i++; $filnavn = $navn . "." . sprintf("%03u", $i) . "." . $ext; } return $filnavn; } //UPLOAD Functions END Så har jeg noget mysql... noge her. //UPLOAD START $uploaddir = $_SERVER["DOCUMENT_ROOT"] ."/pics/"; $maxsize = 150; //pixels (width) if (isset($_FILES["upfile"])) { $source = $_FILES['upfile']['tmp_name']; if (is_uploaded_file($source)) { if (tjektype($_FILES['upfile']['type'])) { $dest = $uploaddir . $_FILES['upfile']['name']; $dest = tjekfil($dest); if (move_uploaded_file($source, $dest)) { thumb($dest,$maxsize,$maxsize); echo "Picture uploaded!"; } else { echo "Picture not uploaded!"; } } else { echo "This type of file can not be uploaded!"; } } else { echo "Error. Contact the webmaster!"; } } //Upload script END
07. februar 2004 - 21:21
#11
Prøv med denne let modificerede thumb() funktion: function Thumb($sourcefile, $size) { $ext = pathinfo($_FILES["upfile"]["name"]); if (strtolower($ext["extension"]) == "png") { $im = imageCreateFromPNG($sourcefile); } elseif (strtolower($ext["extension"]) == "jpeg" || strtolower($ext["extension"]) == "jpg") { $im = imageCreateFromJPEG($sourcefile); } $source_x = imagesx($im); $source_y = imagesy($im); $delta = $size/$source_x; $dest_x = round($source_x*$delta); $dest_y = round($source_y*$delta); $target_id = imagecreatetruecolor($dest_x, $dest_y); imagecopyresampled($target_id,$im,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y); if (strtolower($ext["extension"]) == "png") { imagePNG($target_id, $sourcefile); } elseif (strtolower($ext["extension"]) == "jpeg" || strtolower($ext["extension"]) == "jpg") { imageJPEG($target_id, $sourcefile); } }
07. februar 2004 - 21:31
#12
Her lidt forenklet: function Thumb($sourcefile, $size) { $type = exif_imagetype($sourcefile); if ($type == IMAGETYPE_PNG) { $im = imageCreateFromPNG($sourcefile); } elseif ($type == IMAGETYPE_JPEG) { $im = imageCreateFromJPEG($sourcefile); } $source_x = imagesx($im); $source_y = imagesy($im); $delta = $size/$source_x; $dest_x = round($source_x*$delta); $dest_y = round($source_y*$delta); $target_id = imagecreatetruecolor($dest_x, $dest_y); imagecopyresampled($target_id,$im,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y); if ($type == IMAGETYPE_PNG) { imagePNG($target_id, $sourcefile); } elseif ($type == IMAGETYPE_JPEG) { imageJPEG($target_id, $sourcefile); } }
07. februar 2004 - 21:36
#13
dvs at dit overståede script erstatte dette her: //Upload functions START function Thumb($sourcefile, $size) { $ext = pathinfo($_FILES["upfile"]["name"]); if (strtolower($ext["extension"]) == "png") { $im = imageCreateFromPNG($sourcefile); } elseif (strtolower($ext["extension"]) == "jpeg" || strtolower($ext["extension"]) == "jpg") { $im = imageCreateFromJPEG($sourcefile); } $source_x = imagesx($im); $source_y = imagesy($im); $delta = $size/max($source_x, $source_y); $dest_x = round($source_x*$delta); $dest_y = round($source_y*$delta); $target_id = imagecreatetruecolor($dest_x, $dest_y); imagecopyresampled($target_id,$im,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y); if (strtolower($ext["extension"]) == "png") { imagePNG($target_id, $sourcefile); } elseif (strtolower($ext["extension"]) == "jpeg" || strtolower($ext["extension"]) == "jpg") { imageJPEG($target_id, $sourcefile); } } function tjektype($type) { $tilladt = array('image/x-png', 'image/png', 'image/pjpeg', 'image/jpeg'); if(!in_array($type, $tilladt)) { return false; }else{ return true; } } function tjekfil($filnavn) { $i = 0; $arr = explode(".", $filnavn); $ext = array_pop($arr); $navn = implode(".", $arr); while (is_file($filnavn)) { $i++; $filnavn = $navn . "." . sprintf("%03u", $i) . "." . $ext; } return $filnavn; } //UPLOAD Functions END Kan jeg så stadig bruge det eksisterende? Hvis ja, hvordan ændre jeg det på bredden bliver 150px, i stedet for højden? Sorry, for alle disse spørgsmål, men kan ikke se hoved og hale i dette her upload noget.
07. februar 2004 - 21:40
#14
Nej, der er tre funktioner. Du skal kun skifte den ene ud. Denne: function Thumb($sourcefile, $size) { $ext = pathinfo($_FILES["upfile"]["name"]); if (strtolower($ext["extension"]) == "png") { $im = imageCreateFromPNG($sourcefile); } elseif (strtolower($ext["extension"]) == "jpeg" || strtolower($ext["extension"]) == "jpg") { $im = imageCreateFromJPEG($sourcefile); } $source_x = imagesx($im); $source_y = imagesy($im); $delta = $size/max($source_x, $source_y); $dest_x = round($source_x*$delta); $dest_y = round($source_y*$delta); $target_id = imagecreatetruecolor($dest_x, $dest_y); imagecopyresampled($target_id,$im,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y); if (strtolower($ext["extension"]) == "png") { imagePNG($target_id, $sourcefile); } elseif (strtolower($ext["extension"]) == "jpeg" || strtolower($ext["extension"]) == "jpg") { imageJPEG($target_id, $sourcefile); } } byttes ud med: function Thumb($sourcefile, $size) { $type = exif_imagetype($sourcefile); if ($type == IMAGETYPE_PNG) { $im = imageCreateFromPNG($sourcefile); } elseif ($type == IMAGETYPE_JPEG) { $im = imageCreateFromJPEG($sourcefile); } $source_x = imagesx($im); $source_y = imagesy($im); $delta = $size/$source_x; $dest_x = round($source_x*$delta); $dest_y = round($source_y*$delta); $target_id = imagecreatetruecolor($dest_x, $dest_y); imagecopyresampled($target_id,$im,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y); if ($type == IMAGETYPE_PNG) { imagePNG($target_id, $sourcefile); } elseif ($type == IMAGETYPE_JPEG) { imageJPEG($target_id, $sourcefile); } }
07. februar 2004 - 22:37
#15
okay... har så et andet problem. oprindelig ville jeg lave filnanvet om til "time() + rand(0,100) hvordan gøres dette? Some det er nu bliver .001, .002 ect., filføjet når der er flere billeder, med det samme navn. Jeg regner dog med at navnet "pic", vil fremgå mere end 999 gange. Så derfor vil jeg gerne have ændret navnet.
07. februar 2004 - 22:37
#16
Btw. hvad er forskellen på dit nye script og det gamle?
07. februar 2004 - 23:02
#17
Forskellen er først og fremmest en max bredde istedet for max størrelse. Men osse et noget enklere filtypetjek. Hvad med at ændre 3 til 6 her, så er der mulighed for 1.000.000 med samme navn: $filnavn = $navn . "." . sprintf("%06u", $i) . "." . $ext;
07. februar 2004 - 23:10
#18
Men fx: $filnavn = $navn . "_" . time() . "." . $ext; er da osse en mulighed. Hvorimod: time() + rand(0,100) kan gå galt, hvis to billeder bliver uploaded indenfor 100 sekunder og du er 'uheldig' med rand().
07. februar 2004 - 23:25
#19
En anden mulighed er: $filnavn = uniqid($navn."_", TRUE) . "." . $ext;
08. februar 2004 - 08:24
#20
Jeg bruger den med at ændre fra 3 cifre til 6, virker mere logisk :) Den uploader fint, men får denne fejl når den prøver at resize: Fatal error: Call to undefined function: exif_imagetype() in /home/fedtmco/public_html/mytackle/admin/models/reels/add_ok.php on line 69
08. februar 2004 - 17:34
#21
Så har du ikke understøttelse af exif-lib. Hvis det er din egen server kan du aktivere det, ellers må du bruge en anden form for filtypetjek. Fx: thumb.php --------- <? $uploaddir = "uploads/"; $maxsize = 100; // maximum bredde if (isset($_POST['submit']) && $_POST['submit'] == "Send Fil") { $source = $_FILES['upfile']['tmp_name']; if (is_uploaded_file($source)) { if (tjektype($source)) { $dest = $uploaddir . $_FILES['upfile']['name']; $dest = tjekfil($dest); if (move_uploaded_file($source, $dest)) { thumb($dest, $maxsize); echo "Upload ok!"; echo "<p><img src='".$dest."' alt='thumbnail' /></p>"; } else { echo "No Upload!"; } } else { echo "Denne filtype er ikke tilladt at uploade!"; } } else { echo "Ulovlig handling!"; } } function Thumb($sourcefile, $size) { if (preg_match("/png$/i", $sourcefile)) { $im = imageCreateFromPNG($sourcefile); } elseif (preg_match("/jpe?g$/i", $sourcefile)) { $im = imageCreateFromJPEG($sourcefile); } $source_x = imagesx($im); $source_y = imagesy($im); $delta = $size/$source_x; $dest_x = round($source_x*$delta); $dest_y = round($source_y*$delta); $target_id = imagecreatetruecolor($dest_x, $dest_y); imagecopyresampled($target_id, $im,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y); if (preg_match("/png$/i", $sourcefile)) { imagePNG($target_id, $sourcefile); } elseif (preg_match("/jpe?g$/i", $sourcefile)) { imageJPEG($target_id, $sourcefile); } } function tjektype($source) { if(preg_match("/[png|jpe?g]$/i", $source)) { return true; }else{ return false; } } function tjekfil($filnavn) { $i = 0; $arr = explode(".", $filnavn); $ext = array_pop($arr); $navn = implode(".", $arr); while (is_file($filnavn)) { $i++; $filnavn = $navn . "." . sprintf("%06u", $i) . "." . $ext; } return $filnavn; } ?>
08. februar 2004 - 18:46
#22
Nu ændre den bredden til 150px, men den kommer med denne fejl (har ændret script): Fatal error: Call to undefined function: () in /home/fedtmco/public_html/mytackle/admin/models/reels/add_ok.php on line 172 hehe... det er en skru uden ende :P
08. februar 2004 - 18:56
#23
Er det noget der skal slåes til, hos min hosting udbyder?
08. februar 2004 - 21:20
#24
Nu viser du jo ikke, hvad der står på linie 172, men denne version har jeg testet og den virker hvert fald her: <? $uploaddir = "uploads/"; $maxsize = 150; // maximum bredde if (isset($_POST['submit']) && $_POST['submit'] == "Send Fil") { $source = $_FILES['upfile']['tmp_name']; if (is_uploaded_file($source)) { if (tjektype($_FILES['upfile']['type'])) { $dest = $uploaddir . $_FILES['upfile']['name']; $dest = tjekfil($dest); if (move_uploaded_file($source, $dest)) { thumb($dest, $maxsize); echo "Upload ok!"; echo "<p><img src='".$dest."' alt='thumbnail' /></p>"; } else { echo "No Upload!"; } } else { echo "Denne filtype er ikke tilladt at uploade!"; } } else { echo "Ulovlig handling!"; } } function Thumb($sourcefile, $size) { if (preg_match("/png$/i", $sourcefile)) { $im = imageCreateFromPNG($sourcefile); } elseif (preg_match("/jpe?g$/i", $sourcefile)) { $im = imageCreateFromJPEG($sourcefile); } $source_x = imagesx($im); $source_y = imagesy($im); $delta = $size/$source_x; $dest_x = round($source_x*$delta); $dest_y = round($source_y*$delta); $target_id = imagecreatetruecolor($dest_x, $dest_y); imagecopyresampled($target_id, $im,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y); if (preg_match("/png$/i", $sourcefile)) { imagePNG($target_id, $sourcefile); } elseif (preg_match("/jpe?g$/i", $sourcefile)) { imageJPEG($target_id, $sourcefile); } } function tjektype($type) { $tilladt = array('image/x-png', 'image/png', 'image/pjpeg', 'image/jpeg'); if(!in_array($type, $tilladt)) { return false; }else{ return true; } } function tjekfil($filnavn) { $i = 0; $arr = explode(".", $filnavn); $ext = array_pop($arr); $navn = implode(".", $arr); while (is_file($filnavn)) { $i++; $filnavn = $navn . "." . sprintf("%06u", $i) . "." . $ext; } return $filnavn; } ?>
09. februar 2004 - 08:23
#25
Prøver det lige når jeg kommer hjem. Kan fejlen ikke skyldes et kald til en forkert/ugyldig/ikke-eksisterende function?
09. februar 2004 - 21:20
#26
Fandt fejlen. Prøvede at få filnavne ud tidligere, og i den forbindelse printe en function - glemte at slette det igen :P Detox; Hvorfor kan kan ikke skrive "Echo $filnavn" og herefter få navnet på filen? Kan du ikke samtidig oprette er svar, så du kan få point.
09. februar 2004 - 21:38
#27
Variablen $filnavn er lokal i funktionen tjekfil(), så den kan ikke bruges udenfor funktionen. Du kan måske bruge: $dest = tjekfil($dest); if (move_uploaded_file($source, $dest)) { thumb($dest,$maxsize,$maxsize); echo basename($dest)." uploaded!"; } else { echo "Picture not uploaded!"; }
10. februar 2004 - 11:00
#28
Har brug for at smide filnavnet ind i en db, hvorfor jeg spørger :) Dit script, poster det "ikke bare" en besked hvorvidt billedet er uploadet eller ej?
10. februar 2004 - 11:01
#29
Prøver det lige når jeg kommer hjem. Er vist på tide jeg får læst noget om functions :P
10. februar 2004 - 11:09
#30
Ja, det er klart. Så kan du vælge at smide både sti og navn ind med: $dest eller blot navnet: basename($dest). I øvrigt en lille fejl her: thumb($dest,$maxsize,$maxsize); skal være: thumb($dest,$maxsize);
Vi tilbyder markedets bedste kurser inden for webudvikling