Avatar billede Slettet bruger
26. januar 2005 - 18:33 Der er 8 kommentarer og
1 løsning

Gøre et billede mindre i upload script

Jeg har et uploadscript der virker ganske udmærket. Hvis jeg uploader et billede der er over ca. 500 kb bliver billedet bare ikke vist, jeg har ingen idé om hvorfor, det er måske noget hosten har sat (i123.dk).

Jeg vil derfor gerne have implementeret en "billedeformindsker" i dette script, det haster rigtig meget, derfor giver jeg 200 point for denne opgave.

Billedet skal gøre mindre hvis det er større end 400*400 px, og mit upload script ligger her http://pastebin.dk/index.php?show=154
Avatar billede cmau Nybegynder
26. januar 2005 - 18:38 #1
Her er noget kode jeg selv bruger:

<?
session_start();

if(!$_SESSION[brugerid]) {

include('login.php');

exit;

} else {

include('../sql.php');

if(isset($_POST[kategori])) {

mysql_query("INSERT INTO zurekk_billeder (kategori,billede_type) VALUES ('$_POST[kategori]','$_POST[billede_type]')") or die(mysql_error());

$til = "../images/billeder/".mysql_insert_id().".jpg";
$til_lille = "../images/billeder/".mysql_insert_id()."_lille.jpg";

copy($_FILES["billede"]["tmp_name"],$til);

$imgsize = getimagesize($til);

$width    = 125;
$height    = 125;

$dst_img = imagecreatetruecolor($width,$height);
$src_img=ImageCreateFromJpeg("$til");

ImageCopyResampled($dst_img,$src_img,0,0,0,0,$width,$height,ImageSX($src_img),ImageSY($src_img));

ImageJpeg($dst_img, $til_lille);

echo '<SCRIPT type="text/javascript">alert("Billedet blev tilføjet!")</SCRIPT>';

echo '<p><a href="../billeder/billede_oversigt.php?kategori='.$_POST[kategori].'">Klik her for at se billedet!</a></p>';
echo '<p><a href="admin_billede.php">Klik her for at tilføje et billede mere!</a></p>';
echo '<p><a href="index.php">Klik her for at komme til admin paneletsforside!</a></p>';

} else {

echo '<form method="POST" action="admin_billede.php" enctype="multipart/form-data">';

echo '<p>Kategori:<br><select size="1" name="kategori">';

$query = mysql_query("SELECT * FROM zurekk_kategorier WHERE type = 'billeder'") or die(mysql_error());

while ($row = mysql_fetch_array($query)) {

echo '<option value="'.$row[kategori].'">'.$row[kategori].'</option>';

}

echo '</select></p>';

echo '<p>Billede:<br><input type="file" name="billede"> - Kun .jpg og .gif billeder!</p>';

echo '<p>Billede type:<br><select size="1" name="billede_type">';
echo '<option value="jpg">.jpg</option>';
echo '<option value="gif">.gif</option>';
echo '</select></p>';

echo '<p><input type="submit" value="Tilføj" name="submit"></p>';
echo '</form>';

}
}
?>
Avatar billede net-city Nybegynder
26. januar 2005 - 18:39 #2
Du kan da lave noget ala dette.

if ($bredde >= "400"){
$bredde = "250";
} else {
$bredde = "400";
}
         

også.

$udskrift = "<img src=\"".trim($sti)."\" border=\"0\" width='$bredde'><br><br>
Avatar billede Slettet bruger
26. januar 2005 - 19:03 #3
det er ikke i udskriften jeg skal have et mindre billede, billedet skal laves mindre.. også så det fylder mindre, jeg kunne forestille mig noget gdlib
Avatar billede Slettet bruger
26. januar 2005 - 19:14 #4
cmau,  i det du har der, forbliver forholdet der intakt? og hvis billedet er f.eks. 200*300 så skal det jo ikke ændres, gør det der i dit script?
Avatar billede Slettet bruger
26. januar 2005 - 19:44 #5
eller kunne du implementere det ind i mit script?
Avatar billede Slettet bruger
26. januar 2005 - 20:53 #6
lukker her, folk gider åbenbart ikke svare.. jeg har brugt noget fra dig cmau, smid svar så får du 10 point!
Avatar billede Slettet bruger
14. september 2006 - 12:07 #7
Dette er en tilpasset version af cmaus kode:

        move_uploaded_file($_FILES['upfil']['tmp_name'], $uploadfile);
        $size = getimagesize($uploadfile);
        $new_width = 450;
        $new_height = $size[1] * ($new_width/$size[0]);
        $dest_img = imagecreatetruecolor($new_width,$new_height);
        $source_img = ImageCreateFromJpeg($uploadfile);
        ImageCopyResampled($dest_img, $source_img, 0, 0, 0, 0, $new_width, $new_height, ImageSX($source_img), ImageSY($source_img));
        ImageJpeg($dest_img, $uploadfile);

Den starter først efter billedet er modtaget i variablen $uploadfile.

Jeg anvender en fast bredde og fastholder forholdet ved at udregne højden ud fra forholdet mellem den gamle bredde og den nye.

Håber nogen kan bruge det til noget, for jeg kunne ikke selv finde et komplet svar, som ændrede billedets størrelse, ikke bare under visning, men på selve webadressen efter upload.
Avatar billede Slettet bruger
14. september 2006 - 14:39 #8
function resizeImage($imageFrom, $MaxX, $MaxY, $destination) {
        global $core;
       
        $size = GetImageSize($imageFrom);        // params of image
       
        $imgX = $size[0];
        $imgY = $size[1];
       
        if($imgX > $MaxX) {
            $imgY = $imgY / ($imgX / $MaxX);
            $imgX = $MaxX;
        }
       
        if($imgY > $MaxY) {
            $imgX = $imgX / ($imgY / $MaxY);
            $imgY = $MaxY;
        }
       
        $im = imagecreatefromjpeg($imageFrom);        // path to your gallery
        $small = imagecreatetruecolor($imgX, $imgY);        // new image
        if(!ImageCopyResampled($small, $im, 0, 0, 0, 0, $imgX, $imgY, $size[0], $size[1])) {
            die("Kunne ikke lave filen");
        }
           
        if(!ImageJPEG($small, $destination, 80)) {
            die("Kunne ikke oprette filen i mappen.");
        }
           
        chmod(strtolower($destination), 0777);
        ImageDestroy($im);
    }

Denne gør det samme. $imageFrom skal være $_FILES['tmp_name'] under upload.
Avatar billede Slettet bruger
14. september 2006 - 14:39 #9
og global $core; er ikke nødvendigt :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester