Avatar billede latrell Nybegynder
18. februar 2007 - 21:54 Der er 26 kommentarer og
2 løsninger

Spejlvende billede

Hej Eksperter,

Findes der en metode hvorpå man kan spejlvende et billede (altså et billede der ER uploadet på en server) :-)

Metoden skal helst virke i alle browsere.

Mvh.
mig :-)
Avatar billede jakobdo Ekspert
18. februar 2007 - 22:01 #1
Avatar billede pezz Novice
19. februar 2007 - 00:51 #2
Du kan vha gd/imagemagick kopiere dit billede over i et nyt blank billede, "streg for streg". Altså f.eks. én vertikal linie efter en anden, vupti så er det spejlvendt.
Avatar billede desc Nybegynder
20. februar 2007 - 15:14 #3
function flipHorizontal(&$img) {
    $size_x = imagesx($img);
    $size_y = imagesy($img);
    $temp = imagecreatetruecolor($size_x, $size_y);
    $x = imagecopyresampled($temp, $img, 0, 0, ($size_x-1), 0, $size_x, $size_y, 0-$size_x, $size_y);
    if ($x) {
    $img = $temp;
    }
    else {
    die("Unable to flip image");
    }
    }
    $myimage = imagecreatefromjpeg("psclogo.jpg");
    flipHorizontal($myimage);
    header("Content-type: image/jpeg");
    imagejpeg($myimage);
    ?>
Avatar billede latrell Nybegynder
20. februar 2007 - 16:00 #4
Det skal helst virke på .gif billeder også :-)

Kan det lade sig gøre?
Avatar billede latrell Nybegynder
20. februar 2007 - 16:08 #5
Jeg har prøvet med:   

$myimage = imagecreatefromgif("billede.gif");
    flipHorizontal($myimage);
    header("Content-type: image/gif");
    return imagegif($myimage);

Men det resulterer i at baggrunden på .gif billedet bliver sort. Kan man få den til at gøre baggrunden hvid i stedet?
Avatar billede latrell Nybegynder
20. februar 2007 - 18:03 #6
Nå, det prøver jeg lige at oprette en ny tråd om .. Selve spørgsmålet er jo blevet besvaret.. smider du et svar?
Avatar billede jakobdo Ekspert
20. februar 2007 - 18:34 #7
Denne kan også klare gif:

function invert_image($input,$output,$color=false)
{
    $ext = strtolower(end(explode('.',$input)));
    switch($ext)
    {
        case 'jpeg':
        case 'jpg':
            $picture = imagecreatefromjpeg($input);
        case 'png':
            $picture = imagecreatefrompng($input);
        case 'gif':
            $picture = imagecreatefromgif($input);
        default:
            die("ERROR - WRONG EXTENSION");
    }
   
    $x = imagesx($picture);
    $y = imagesy($picture);

    for($i=0; $i<$y; $i++)
    {
        for($j=0; $j<$x; $j++)
        {
            $pos = imagecolorat($picture, $j, $i);
            $f = imagecolorsforindex($picture, $pos);
            if($color == true)
            {
                $col = imagecolorresolve($picture, 255-$f['red'], 255-$f['green'], 255-$f['blue']);
            }
            else
            {
                $gst = $f['red']*0.15 + $f['green']*0.5 + $f['blue']*0.35;
                $col = imagecolorclosesthwb($picture, 255-$gst, 255-$gst, 255-$gst);
            }
            imagesetpixel($picture, $j, $i, $col);
        }
    }
    if(empty($output))
        header('Content-type: image/'.$ext);
   
    switch($ext)
    {
        case 'jpeg':
        case 'jpg':
            imagejpeg($picture,$output,90);
        case 'png':
            imagepng($picture,$output);
        case 'gif':
            imagegif($picture,$output);
        default:
            die("ERROR - WRONG EXTENSION");
    }
}
Avatar billede jakobdo Ekspert
20. februar 2007 - 18:34 #8
Og et svar!
Avatar billede latrell Nybegynder
20. februar 2007 - 19:22 #9
Hvordan skal jeg kalde funktionen korrekt med f.eks. billed.gif?
Avatar billede jakobdo Ekspert
20. februar 2007 - 19:45 #10
invert_image($dit_billede);
Avatar billede latrell Nybegynder
20. februar 2007 - 19:48 #11
Resulterer i:

ERROR - WRONG EXTENSION
Avatar billede latrell Nybegynder
20. februar 2007 - 19:49 #12
Warning: Missing argument 2 for invert_image() in /var/www/vhosts/habbo-media.dk/httpdocs/test/test2.php on line 2
ERROR - WRONG EXTENSION
Avatar billede jakobdo Ekspert
20. februar 2007 - 19:55 #13
Hvad hedder det billede du kalder funktionen med?
Avatar billede jakobdo Ekspert
20. februar 2007 - 19:55 #14
Det skal jo f.eks. være: invert_image("billede.gif");
Avatar billede jakobdo Ekspert
20. februar 2007 - 20:01 #16
Ja?
Avatar billede latrell Nybegynder
20. februar 2007 - 20:03 #17
Burde den ikke virke?
Avatar billede jakobdo Ekspert
20. februar 2007 - 20:15 #18
Pis, min kode er helt væk!
Beklager! Den spejler ikke, men inverter! :o(
Avatar billede latrell Nybegynder
20. februar 2007 - 20:16 #19
Hehe okay :-)
Avatar billede jakobdo Ekspert
20. februar 2007 - 22:02 #20
Jeg prøvede lige at rette desc's løsning til, så den acceptere png, jpeg, jpg og gif.

<?php
//http://www.eksperten.dk/spm/763355

function flipHorizontal($input)
{
    $ext = strtolower(end(explode('.',$input)));
    switch($ext)
    {
        case 'png':
            $img = imagecreatefrompng($input);
            break;
        case 'jpg':
        case 'jpeg':
            $img = imagecreatefromjpeg($input);
            break;
        case 'gif':
            $img = imagecreatefromgif($input);
            break;
        default:
            die("Unable to flip image - wrong extension");
    }
    $size_x = imagesx($img);
    $size_y = imagesy($img);
    $temp = imagecreatetruecolor($size_x, $size_y);
    $x = imagecopyresampled($temp, $img, 0, 0, ($size_x-1), 0, $size_x, $size_y, 0-$size_x, $size_y);
    if($x)
    {
        switch($ext)
        {
            case 'png':
                header("Content-type: image/png");
                imagepng($temp);
                break;
            case 'jpg':
            case 'jpeg':
                header("Content-type: image/jpeg");
                imagejpeg($temp,'',90);
                break;
            case 'gif':
                header("Content-type: image/gif");
                imagegif($temp);
                break;
            default:
                die("Unable to flip image - wrong extension");
        }
    }
    else
    {
        die("Unable to flip image");
    }
}

flipHorizontal('http://www.habbo.dk/habbo-imaging/avatar/8530418018255052850230005014400518a8123a77f7e4c686d49c864dbc5f9.gif');

?>

Den har dog også problemet med trans-color!

Jeg prøvede med et hack at rette det på følgende måde:

case 'gif':
                header("Content-type: image/gif");
                $trans_color = imagecolorallocate($temp, 0, 0, 0);
                imagecolortransparent($temp, $trans_color);
                imagegif($temp);
                break;

Men så forsvinder alle sorte farver! :o(
Avatar billede jakobdo Ekspert
20. februar 2007 - 22:10 #21
Nu er dette nok ikke en holdbar løsning, men prøv at se her:

<?php
//http://www.eksperten.dk/spm/763355

function flipHorizontal($input)
{
    $ext = strtolower(end(explode('.',$input)));
    switch($ext)
    {
        case 'png':
            $img = imagecreatefrompng($input);
            break;
        case 'jpg':
        case 'jpeg':
            $img = imagecreatefromjpeg($input);
            break;
        case 'gif':
            $img = imagecreatefromgif($input);
            $trans_color = imagecolorallocate($img, 255, 255, 255);
            imagecolortransparent($img, $trans_color);
            break;
        default:
            die("Unable to flip image - wrong extension");
    }
    $size_x = imagesx($img);
    $size_y = imagesy($img);
    $temp = imagecreatetruecolor($size_x, $size_y);
    $x = imagecopyresampled($temp, $img, 0, 0, ($size_x-1), 0, $size_x, $size_y, 0-$size_x, $size_y);
    if($x)
    {
        switch($ext)
        {
            case 'png':
                header("Content-type: image/png");
                imagepng($temp);
                break;
            case 'jpg':
            case 'jpeg':
                header("Content-type: image/jpeg");
                imagejpeg($temp,'',90);
                break;
            case 'gif':
                header("Content-type: image/gif");
                imagegif($temp);
                break;
            default:
                die("Unable to flip image - wrong extension");
        }
    }
    else
    {
        die("Unable to flip image");
    }
}

flipHorizontal('http://www.habbo.dk/habbo-imaging/avatar/8530418018255052850230005014400518a8123a77f7e4c686d49c864dbc5f9.gif');

?>
Avatar billede latrell Nybegynder
20. februar 2007 - 22:34 #22
Jeg har selv fået løst problemet med en blanding af jeres forslag :-)

<?php
header("Content-type: image/png");

function createbackground($overlay) {
    $thepic = imagecreatefromgif("images/bg.gif");
    imagealphablending($thepic, true);
    $theoverlay = imagecreatefromgif($overlay);
    imagecopymerge($thepic, $theoverlay, 0,0,0,0,64,106,100);
    imagedestroy($theoverlay);
    return imagepng(flipHorizontal($thepic), '', 9);
}

function flipHorizontal(&$img) {
    $size_x = imagesx($img);
    $size_y = imagesy($img);
    $temp = imagecreatetruecolor($size_x, $size_y);
    $x = imagecopyresampled($temp, $img, 0, 0, ($size_x-1), 0, $size_x, $size_y, 0-$size_x, $size_y);
    if ($x) {
    $img = $temp;
    }
    else {
    die("Fejl");
    }
    return $img;
    }
   
   
    $overlay = $_REQUEST['billede'];
    return createbackground($overlay);

?>
Avatar billede latrell Nybegynder
20. februar 2007 - 22:35 #23
Så hvis i begge vil smide et svar, så får i lige points..

_Mange_ tak for hjælpen :)
Avatar billede jakobdo Ekspert
21. februar 2007 - 07:49 #24
Din kode kan jo "kun" benytte gif-billeder?
Skal den ikke være mere fleksibel? (jpg, png, gif)

Men du får et svar!
Avatar billede desc Nybegynder
21. februar 2007 - 12:40 #25
Jeg havde lidt travlt da jeg smed det første reply.
Avatar billede jakobdo Ekspert
21. februar 2007 - 12:58 #26
desc: Det var nu heller ikke ment til dig, det var mere til latrell. :o)
Avatar billede latrell Nybegynder
21. februar 2007 - 13:08 #27
Jeg skal kun bruge det på GIF billeder, så det er som ikke så vigtigt - ellers tak :-)
Avatar billede jakobdo Ekspert
21. februar 2007 - 14:18 #28
Fair nok.
Jeg 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