2012-12-11 9 views
13

Mam aplikację, która musi przycinać obrazy o zmiennej szerokości & wysokości. ale nie wiem jak to zrobić za pomocą funkcji php gd (Createimagefromjpeg)Jak uzyskać zmienną szerokość i wysokość podczas przycinania za pomocą Jcrop i zapisywania przy pomocy PHP GD

w moim kodu mam:

$targ_w = 400; 
$targ_h = 400; 

Oznacza to, że przycięte zdjęcie zawsze będzie się to szerokość i wysokość. to nie jest to, czego chcę. Chcę w jakiś sposób przycinać obrazy i przyciąć go jak Wybrałem go na powierzchni upraw jak na tym zdjęciu:

cropped image

teraz kiedy przyciąć ten obraz, jak na zdjęciu i uzyskać w ten sposób:

square image created

jest to kwadratowy obrazu, bo trzeba dać szerokość i wysokość. ale przy każdym zdjęciu przycinam rozmiary są różne.

Czy istnieje sposób (zmienne, id itp ..), aby to zrobić?

Dzięki: D

EDIT: mój kod do tworzenia obrazu przyciętego:

<!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> 

mój kod, aby przesłać obraz:

<!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> 

mój kod, aby przyciąć obraz z 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> 

Odpowiedz

9

zmienić linię z

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

do

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

=> To spowoduje utworzenie nowego obrazu z wybranego obszaru, można usunąć $ targ_w i targ_h $ zmienne.

i zmienić linię z

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

do

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

mogę spróbować. i dodam mój kod powyżej :) –

+0

Nie mogę uzyskać tego kodu do pracy. nie zapisuje/pokazuje przyciętego obrazu. to po prostu daje pustą stronę. –

+0

Czy przycięte zdjęcie zostanie utworzone? Skomentuj 2 ostatnie linie i dodaj error_reporting (-1) u góry skryptu, aby wyświetlić ewentualny błąd. –

Powiązane problemy