Avatar billede default Nybegynder
19. juni 2008 - 20:15 Der er 10 kommentarer og
1 løsning

Transperant resize?

Jeg står med et lille problem, jeg har et resize system, som skal resize billeder der har transperant baggrund, men det her system laver baggrunden sort. Hvad skal ders gøres for at løse dette?

Her er min upload fil


//Her skal filen flyttes fra
$fra    = $_FILES['billede']['tmp_name'];

//Hvilken type fil arbejder vi med?
list($bredde, $hojde) = getimagesize($_FILES['billede']['tmp_name']);
$forhold = $hojde/$bredde;

$bredde_ny = 30;
$hojde_ny = 30;

$ext2    = strtolower(end(explode(".", $_FILES['billede']['name'])));

if($ext2 == "jpeg" || $ext2 == "jpg")
{
$source = imagecreatefromjpeg($_FILES['billede']['tmp_name']);
}
if($ext2 == "gif")
{
$source = imagecreatefromgif($_FILES['billede']['tmp_name']);
}
imagealphablending($source, true);
$destination = imagecreatetruecolor($bredde_ny, $hojde_ny);

imagecopy($destination, $source, 0, 0, 0, 0, $bredde_ny, $hojde_ny, $bredde, $hojde);

imagegif($destination, $_FILES['billede']['tmp_name']);

$ext    = strtolower(end(explode(".", $_FILES['billede']['name'])));

//Hvis filen er et jpg, jpeg eller gif billede
if($ext == "jpg" || $ext == "jpeg" || $ext == "gif")
{
$tid        = $_SERVER['REMOTE_ADDR'];

//Her giver vi billedet et andet navn, så der ikke kommer to ens navne…
$nytNavn = $tid . "_" . rand(1, 1000000) . "." . $ext;

//Her er vores destination
$til        = "billeder/" . $nytNavn;

//Her sker det magiske:
move_uploaded_file($fra, $til);
echo "<img src=\"billeder/$nytNavn\">";
}
Avatar billede jakobdo Ekspert
19. juni 2008 - 20:21 #1
Her på siden: http://dk.php.net/manual/en/function.imagecolortransparent.php
Fandt jeg dette script:

function createthumb($name, $newname, $new_w, $new_h, $border=false, $transparency=true, $base64=false) {
    if(file_exists($newname))
        @unlink($newname);
    if(!file_exists($name))
        return false;
    $arr = split("\.",$name);
    $ext = $arr[count($arr)-1];

    if($ext=="jpeg" || $ext=="jpg"){
        $img = @imagecreatefromjpeg($name);
    } elseif($ext=="png"){
        $img = @imagecreatefrompng($name);
    } elseif($ext=="gif") {
        $img = @imagecreatefromgif($name);
    }
    if(!$img)
        return false;
    $old_x = imageSX($img);
    $old_y = imageSY($img);
    if($old_x < $new_w && $old_y < $new_h) {
        $thumb_w = $old_x;
        $thumb_h = $old_y;
    } elseif ($old_x > $old_y) {
        $thumb_w = $new_w;
        $thumb_h = floor(($old_y*($new_h/$old_x)));
    } elseif ($old_x < $old_y) {
        $thumb_w = floor($old_x*($new_w/$old_y));
        $thumb_h = $new_h;
    } elseif ($old_x == $old_y) {
        $thumb_w = $new_w;
        $thumb_h = $new_h;
    }
    $thumb_w = ($thumb_w<1) ? 1 : $thumb_w;
    $thumb_h = ($thumb_h<1) ? 1 : $thumb_h;
    $new_img = ImageCreateTrueColor($thumb_w, $thumb_h);
 
    if($transparency) {
        if($ext=="png") {
            imagealphablending($new_img, false);
            $colorTransparent = imagecolorallocatealpha($new_img, 0, 0, 0, 127);
            imagefill($new_img, 0, 0, $colorTransparent);
            imagesavealpha($new_img, true);
        } elseif($ext=="gif") {
            $trnprt_indx = imagecolortransparent($img);
            if ($trnprt_indx >= 0) {
                //its transparent
                $trnprt_color = imagecolorsforindex($img, $trnprt_indx);
                $trnprt_indx = imagecolorallocate($new_img, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
                imagefill($new_img, 0, 0, $trnprt_indx);
                imagecolortransparent($new_img, $trnprt_indx);
            }
        }
    } else {
        Imagefill($new_img, 0, 0, imagecolorallocate($new_img, 255, 255, 255));
    }
 
    imagecopyresampled($new_img, $img, 0,0,0,0, $thumb_w, $thumb_h, $old_x, $old_y);
    if($border) {
        $black = imagecolorallocate($new_img, 0, 0, 0);
        imagerectangle($new_img,0,0, $thumb_w, $thumb_h, $black);
    }
    if($base64) {
        ob_start();
        imagepng($new_img);
        $img = ob_get_contents();
        ob_end_clean();
        $return = base64_encode($img);
    } else {
        if($ext=="jpeg" || $ext=="jpg"){
            imagejpeg($new_img, $newname);
            $return = true;
        } elseif($ext=="png"){
            imagepng($new_img, $newname);
            $return = true;
        } elseif($ext=="gif") {
            imagegif($new_img, $newname);
            $return = true;
        }
    }
    imagedestroy($new_img);
    imagedestroy($img);
    return $return;
}
//example useage
createthumb("img.gif", "tn_img.gif", 64,64,true, true, false);
Avatar billede default Nybegynder
19. juni 2008 - 20:23 #2
Hvor vælgr man størrelse på billedet ? :P er det 64,64? :p
Avatar billede default Nybegynder
19. juni 2008 - 20:29 #3
Doh, fandt ud af det :) tjekker lige om den virker
Avatar billede jakobdo Ekspert
20. juni 2008 - 11:39 #4
Fik du det til at virke ?
Avatar billede default Nybegynder
20. juni 2008 - 14:20 #5
Den laver en sort streg i toppen og i venstre side at billedet, se evt her
http://geekabit.dk/tn_img.gif

Kan man evt få den til at lave en baggrundsfarve istedet for transperant?
Avatar billede jakobdo Ekspert
20. juni 2008 - 15:20 #6
Samme problem havde jeg, da jeg selv arbejdede med at resize et transparent billede. :o(
Så jeg tror desværre ikke det kan undgåes.
Avatar billede default Nybegynder
20. juni 2008 - 18:10 #7
Tror du at man kan sætte en bagrundsfarve istedet, og om det vil hjælpe på de sorte streger?
Avatar billede jakobdo Ekspert
20. juni 2008 - 19:33 #8
Jeg ved det desværre ikke, så meget legede jeg ikke med det.
Men man kunne måske sætte en baggrund på billedet, resize og så gøre baggrund-farven gennemsigtig igen...
Avatar billede default Nybegynder
24. august 2009 - 20:54 #9
Afgiv svar tak. :)
Avatar billede jakobdo Ekspert
24. august 2009 - 21:07 #10
Svar!
Avatar billede jakobdo Ekspert
24. august 2009 - 21:16 #11
Takker for point.
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