2012-12-11 29 views
13

Ho un'applicazione che deve ritagliare le immagini con altezza variabile & altezza. ma non so come fare questo con la funzione php gd (Createimagefromjpeg)Come ottenere larghezza e altezza variabili durante il ritaglio con Jcrop e salvataggio con PHP GD

nel mio codice ho:

$targ_w = 400; 
$targ_h = 400; 

Ciò significa che l'immagine ritagliata sarà sempre ottenere questo larghezza e l'altezza. non è quello che voglio. Voglio, in qualche modo ritagliare le immagini e ritagliarla come ho selezionato è in area di ritaglio come in questa immagine:

cropped image

Ora, quando ho raccolto che immagine, come nella foto ottengo questo:

square image created

Si è un'immagine quadrata perché ho dare una larghezza e un'altezza. ma ad ogni immagine che ritagliamo le dimensioni sono diverse.

C'è un modo (variabili, id ecc.) Per fare questo?

Grazie: D

EDIT: il mio codice per creare l'immagine ritagliata:

<!DOCTYPE> 
<html> 
<head> 
    <title>Cropped Image</title> 
</head> 
<body> 

<?php 
SESSION_start(); 
if ($_SERVER['REQUEST_METHOD'] == 'POST') 
{ 
$targ_w = 400; 
$targ_h = 400; 
$jpeg_quality = 100; 

$src = $_SESSION['target_path']; 
$img_r = imagecreatefromjpeg($src); 
$dst_r = ImageCreateTrueColor($targ_w, $targ_h); 

imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'], 
$targ_w,$targ_h,$_POST['w'],$_POST['h']); 

header('Content-type: image/jpeg'); 
imagejpeg($dst_r, 'data/uploads/' . basename($src)); 
header('Location:'.$src); 
exit; 
} 

?> 

</body> 
</html> 

Il mio codice per caricare l'immagine:

<!DOCTYPE> 
<html> 

<head> 
    <title>Het Vergeet-mij-nietje</title> 
    <link href="style/default.css" REL="stylesheet" TYPE="text/css"> 
    <script type="text/javascript" src="js/showfunctie.js"></script> 
    <script src="js/jquery.min.js"></script> 
    <script src="js/jquery.Jcrop.min.js"></script> 
    <link rel="stylesheet" href="css/jquery.Jcrop.css" type="text/css" /> 
</head> 

<body> 
<center> 
    <div id="title"> 
    <h1><a href="index.php" id="link1">Het "Vergeet-mij-nietje"</a></h1> 
    <h3>Upload Systeem</h3> 
    </div> 

<div id="content1"> 
    <p><b>Upload hier een afbeelding en druk op upload om hem vervolgens te kunnen bijsnijden.</b></p> 
    <form action="uploaded.php" method="post" enctype="multipart/form-data"> 
     <input type="file" name="filename" /> 
     <input type="submit" value="Upload" /> 
    </form> 
<br /> <br /> 

<p align="left"><b>Bekijk hier de gecropte en geuploadde foto's</b></p> 


    <p class="album"> 
     <?php include 'album.php';?> 
    </p> 

</div> 

<div id="copyright"> 
Copyright &copy; Kees Sonnema & Jan Beetsma 
</div> 

</body> 
</html> 

Il mio codice per ritagliare l'immagine con JCrop:

<html> 
    <head> 
    <script src="js/jquery-1.7.2.min.js"></script> 
    <script src="js/lightbox.js"></script> 
    <link href="style/css/lightbox.css" rel="stylesheet" /> 
    </head> 
<body> 

<?php 

$page = $_SERVER['PHP_SELF']; 

//settings 
$column = 6; 

// directories 
$base = "data"; 
$uploads = "thumbs"; 

// get album 
$get_album = $_GET['album']; 

if (!$get_album) 
{ 
    echo "<b>Selecteer een album:</b><p />"; 
    $handle = opendir($base); 
    while (($file = readdir($handle))!==FALSE) 
    { 
     if (is_dir($base."/".$file) && $file != "." && $file !=".." && $file !="$uploads") 
     { 
      echo "<a href='$page?album=$file'>$file</a><br />"; 
     } 
    } 
    closedir($handle); 
} 

else 
{ 
    if (!is_dir($base."/".$get_album) || strstr($get_album,".")!=NULL || strstr($get_album,"/")!=NULL || strstr($get_album,"\\")!=NULL) 
    { 
     echo "Dit album bestaat niet."; 
    } 
    else 
    { 
     $x = 0; 
     echo "<b>$get_album</b><p />"; 
     $handle = opendir($base."/".$get_album); 
     while (($file = readdir($handle)) !== FALSE) 
     { 
      if ($file != "." && $file != "..") 
      { 
       echo "<table style='display:inline;'><tr><td><a href='$base/$get_album/$file' rel='lightbox'><img src='$base/$get_album/$file' height='150' width='100'></a></td></tr></table>"; 
       $x++; 
      } 
       if ($x==$column) 
       { 
        echo "<br />"; 
        $x = 0; 
       } 
      } 
    } 
    closedir($handle); 

    echo "<p /><a href='$page'>Terug Naar Albums</a>"; 

} 

?> 

</body> 
</html> 

risposta

9

Modificare la linea da

$dst_r = ImageCreateTrueColor($targ_w, $targ_h); 

a

$dst_r = imagecreatetruecolor($_POST['w'], $_POST['h']); 

=> questo creerà una nuova immagine con area selezionata, è possibile eliminare $ targ_w e $ targ_h variabili.

e cambiare la linea da

imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'], 
$targ_w,$targ_h,$_POST['w'],$_POST['h']); 

a

imagecopy(
    $dst_r, $img_r, 
    0, 0, $_POST['x'], $_POST['y'], 
    $_POST['w'], $_POST['h'] 
); 
+0

posso provare che. e posterò il mio codice qui sopra per te :) –

+0

non riesco a far funzionare questo codice. non salva/mostra l'immagine ritagliata. dà solo una pagina vuota. –

+0

L'immagine ritagliata viene creata? Commenta le 2 ultime righe e aggiungi error_reporting (-1) nella parte superiore dello script per mostrare l'eventuale errore. –