Avatar billede BTEngineer Novice
25. september 2007 - 18:04 Der er 32 kommentarer og
1 løsning

Beskæring i PHP og JS

Hej Eksperter!

Jeg vil gerne lave et script således at man kan uploade et billede og derefter beskærer det.

Til det har jeg fundet dette et genialt JS-script:
http://www.defusion.org.uk/demos/060519/cropper.php

Koden:
http://www.defusion.org.uk/code/javascript-image-cropper-ui-using-prototype-scriptaculous

Når man har valgt området på billedet
(width, height, x1, y1, x2, y2) så skal det resizes med f.eks. jakobdo's script:
http://www.eksperten.dk/artikler/1141

Men hvordan gør jeg det?

Billedet skal som sagt resizes til den valgte markering og uploades til min server i den størrelse. Men det orginale billede skal ikke slettes, det skal også ligge på serveren!

Tak på forhånd,
Henrik Nielsen
Avatar billede jakobdo Ekspert
26. september 2007 - 07:50 #1
Kan du få Cropper til at sende følgende data:

BILLEDETS NAVN
X1
X2
Y1
Y2
WIDTH
HEIGHT

?
Avatar billede jakobdo Ekspert
26. september 2007 - 07:50 #2
Og når jeg skriver sende, mener jeg SENDE via en FORM som POST eller GET.
Avatar billede BTEngineer Novice
26. september 2007 - 15:41 #3
Ja, det kan jeg godt :-)
Avatar billede jakobdo Ekspert
26. september 2007 - 15:49 #4
Som POST eller GET?
Avatar billede BTEngineer Novice
26. september 2007 - 16:45 #5
POST
Avatar billede jakobdo Ekspert
26. september 2007 - 17:51 #6
Så prøv lige at udskriv følgende info:

echo '<pre>';
print_r($_POST);
echo '</pre>';

Og smid info herind.
Avatar billede BTEngineer Novice
26. september 2007 - 20:59 #7
Array
(
    [pp] => profilepictures/11908331422955
    [x1] => 218
    [y1] => 169
    [x2] => 341
    [y2] => 333
    [width] => 123
    [height] => 164
    [continue_apply] => Fortsæt til godkendelsen
)
Avatar billede jakobdo Ekspert
26. september 2007 - 21:08 #8
Så bør du kunne kalde:

if(crop($_POST['pp'],'cropped_file.jpg',min($_POST['x1'],$_POST['x2']),min($_POST['y1'],$_POST['y2']),_POST['width'],_POST['height']))
echo 'Cropped OK';
else
echo 'Cropped failed';
Avatar billede BTEngineer Novice
26. september 2007 - 21:14 #9
Parse error: syntax error, unexpected '[' in /home/public_html/test/profile_picture/crop_picture.php on line 65

får fejl i din kode.
Avatar billede jakobdo Ekspert
26. september 2007 - 21:24 #10
Jeg manglede 2 $
Prøv denne kode:
if(crop($_POST['pp'],'cropped_file.jpg',min($_POST['x1'],$_POST['x2']),min($_POST['y1'],$_POST['y2']),$_POST['width'],$_POST['height']))
echo 'Cropped OK';
else
echo 'Cropped failed';
Avatar billede BTEngineer Novice
26. september 2007 - 21:26 #11
Fatal error: Call to undefined function crop() in /home/public_html/test/profile_picture/crop_picture.php on line 65
Avatar billede jakobdo Ekspert
26. september 2007 - 21:31 #12
Har du husket at kopiere funktionen crop() fra denne artikel: http://www.eksperten.dk/artikler/1141
Avatar billede BTEngineer Novice
27. september 2007 - 07:12 #13
Sådan ser min kode ud, nu:

if(isset($_POST['continue_apply'])) {

function crop( $_POST[pp], cropped_file.jpg, $_POST[x1], $_POST[x2], $_POST[y1], $_POST[y2])
{
$ext = strtolower( pathinfo( $_POST[pp], PATHINFO_EXTENSION ) );
switch($ext)
{
case 'jpeg':
case 'jpe':
case 'jpg':

$srcim = imagecreatefromjpeg( $_POST[pp] );
break;
case 'gif':
$srcim = imagecreatefromgif( $_POST[pp] );
break;

case 'png':
$srcim = imagecreatefrompng( $_POST[pp] );
break;

default:
return false;
}

if(crop($_POST['pp'],'cropped_file.jpg',min($_POST['x1'],$_POST['x2']),min($_POST['y1'],$_POST['y2']),$_POST['width'],$_POST['height']))
echo 'Cropped OK';
else
echo 'Cropped failed';
}

Og får fejlen:

Parse error: syntax error, unexpected '[', expecting ')' in /home/onlineblog/public_html/test/profile_picture/crop_picture.php on line 65

Hvilket er function crop() linjen.
Jeg ved ikke helt hvor jeg skal putte værdierne ind.
Avatar billede jakobdo Ekspert
27. september 2007 - 08:08 #14
Undskyld, men din kode er jo helt væk! :o)

Prøv her:

<?php

function crop( $filename, $newfilename, $x, $y, $width, $height, $quality=85 )
{
    $ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
    switch($ext)
    {
        case 'jpeg':
        case 'jpe':
        case 'jpg':
            $srcim = imagecreatefromjpeg( $filename );
            break;
        case 'gif':
            $srcim = imagecreatefromgif( $filename );
            break;
        case 'png':
            $srcim = imagecreatefrompng( $filename );
            break;
        default:
            return false;
    }
   
    $dstim = imagecreatetruecolor( $width, $height );
    imagecopyresampled( $dstim, $srcim, 0, 0, $x, $y, $width, $height, $width, $height );
    switch($ext)
    {
        case 'jpeg':
        case 'jpe':
        case 'jpg':
            imagejpeg( $dstim, $newfilename, $quality );
            break;
        case 'gif':
            imagegif( $dstim, $newfilename );
            break;
        case 'png':
            $png_q = floor( abs( $quality / 10 - 9.9 ) );
            imagepng( $srcim, $newfilename, $png_q );
            break;
        default:
            return false;
    }
   
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return file_exists($newfilename);
}

if(isset($_POST['continue_apply']))
{
    if(crop($_POST['pp'],'cropped_file.jpg',min($_POST['x1'],$_POST['x2']),min($_POST['y1'],$_POST['y2']),$_POST['width'],$_POST['height']))
        echo 'Cropped OK';
    else
        echo 'Cropped failed';
}

?>
Avatar billede BTEngineer Novice
27. september 2007 - 14:27 #15
Den siger "Cropped Failed"
Avatar billede jakobdo Ekspert
27. september 2007 - 14:48 #16
Så må du i gang med at debugge.
Avatar billede BTEngineer Novice
27. september 2007 - 14:55 #17
debugge? Hvad :s ?
Avatar billede jakobdo Ekspert
27. september 2007 - 15:19 #18
Du ved selvfølgelig godt hvad debugge er ikke?
Avatar billede BTEngineer Novice
27. september 2007 - 17:50 #19
Joh - At finde programmeringsfejlene igennem evt. et program?
Men hvilket :s
Avatar billede jakobdo Ekspert
27. september 2007 - 19:02 #20
Det virker altså fint hos mig.

http://www.codebreaker.dk/exp/798156/index.html
Avatar billede BTEngineer Novice
27. september 2007 - 21:21 #21
Ja, kan jeg se.

PHP'en ser sådan her ud:
function crop( $filename, $newfilename, $x, $y, $width, $height, $quality=85 )
{
    $ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
    switch($ext)
    {
        case 'jpeg':
        case 'jpe':
        case 'jpg':
            $srcim = imagecreatefromjpeg( $filename );
            break;
        case 'gif':
            $srcim = imagecreatefromgif( $filename );
            break;
        case 'png':
            $srcim = imagecreatefrompng( $filename );
            break;
        default:
            return false;
    }
   
    $dstim = imagecreatetruecolor( $width, $height );
    imagecopyresampled( $dstim, $srcim, 0, 0, $x, $y, $width, $height, $width, $height );
    switch($ext)
    {
        case 'jpeg':
        case 'jpe':
        case 'jpg':
            imagejpeg( $dstim, $newfilename, $quality );
            break;
        case 'gif':
            imagegif( $dstim, $newfilename );
            break;
        case 'png':
            $png_q = floor( abs( $quality / 10 - 9.9 ) );
            imagepng( $srcim, $newfilename, $png_q );
            break;
        default:
            return false;
    }
   
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return file_exists($newfilename);
}

if(isset($_POST['continue_apply']))
{
    if(crop($_POST['pp'],'cropped_file.jpg',min($_POST['x1'],$_POST['x2']),min($_POST['y1'],$_POST['y2']),$_POST['width'],$_POST['height']))
        echo 'Cropped OK';
    else
        echo 'Cropped failed';
}

----------------------
Og formen:
<form action="crop_picture.php" method="POST">

    <input type="hidden" name="pp" value="<? echo $show['profilbillede']; ?>" />
    <input type="hidden" name="x1" id="x1" />
    <input type="hidden" name="y1" id="y1" />
    <input type="hidden" name="x2" id="x2" />
    <input type="hidden" name="y2" id="y2" />
    <input type="hidden" name="width" id="width" />
    <input type="hidden" name="height" id="height" />
   
    <table border="0" width="100%">
        <tr>
            <td><h3>Beskæring</h3></td>
        </tr>
        <tr>
            <td>
            <div id="testWrap">
                <img src="<? echo $show['profilbillede']; ?>" id="testImage" />
            </div>
            </td>
        </tr>
        <tr>
            <td>
            <input type="submit" name="continue_apply" value="Fortsæt til godkendelsen">
            </td>
        </tr>
    </table>
</form>
Avatar billede jakobdo Ekspert
27. september 2007 - 21:32 #22
Den mappe, hvor du har filen crop_picture.php, har du husket at chmod mappen til 777 ?
Avatar billede BTEngineer Novice
28. september 2007 - 09:01 #23
Ja, det har jeg.
Billedet bliver jo først uploadet, og derefter vises det i den beskæringsboks.
Så billedet bliver uploadet. Meningen er så at den også skal oprette den størrelse billede brugeren ønsker (markere i boksen).
Avatar billede jakobdo Ekspert
28. september 2007 - 09:15 #24
Jeg er helt med, men du må prøve dig lidt frem selv.
Avatar billede BTEngineer Novice
28. september 2007 - 14:29 #25
Det har jeg prøvet?
Der er en grund til at jeg har oprettet et spørgsmål :-)
Avatar billede jakobdo Ekspert
28. september 2007 - 21:35 #26
Og du mener ikke jeg har svaret måske? :o)
Avatar billede BTEngineer Novice
29. september 2007 - 11:58 #27
Jeg forstår jo ikke den kode du har lavet - Ved ikke hvordan jeg skal håndterer der outputs der kommer fra formularen.
Avatar billede jakobdo Ekspert
29. september 2007 - 13:40 #28
Du må fange mig på msn: jakobdo (at) hotmail [dot] com
Så må jeg rette det for dig.
Avatar billede BTEngineer Novice
29. september 2007 - 14:02 #29
Er gjort.
Avatar billede jakobdo Ekspert
29. september 2007 - 14:12 #30
Skriv lige til mig så...
Avatar billede BTEngineer Novice
29. september 2007 - 14:51 #31
Smid et svar :-)
Avatar billede jakobdo Ekspert
29. september 2007 - 14:55 #32
Svar!

Problemet var: profilepictures/11908331422955
Det kunne crop selvfølgelig ikke regne ud var et jpg billede.
Så funktionen blev skåret ned til kun at håndtere JPG og det virkede. :o)
Avatar billede jakobdo Ekspert
30. september 2007 - 18:15 #33
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