如何裁剪选定的图像并使用PHP将裁剪的图像保存到文件夹

时间:2012-11-24 14:20:39

标签: php jquery html save jcrop

我正在使用Jcrop插件裁剪图片。

我使用标准html表单上传照片。 我使用以下代码显示上次上传的图像:

 <img id="cropbox" src="<?php echo $target ?>" width="400" />

如下所示:enter image description here

$ target的代码如下所示:

 <?php 
     $target = "uploads/"; 
     $target = $target . basename( $_FILES['filename']['name']) ; 
     $ok=1; 
     if(move_uploaded_file($_FILES['filename']['tmp_name'], $target)) 
     {
     echo "De afbeelding *". basename( $_FILES['filename']['name']). "* is geupload naar de map 'uploads'";
     } 
     else {
     echo "Sorry, er is een probleem met het uploaden van de afbeelding.";
     }
 ?> 

现在我可以开始选择要裁剪的区域:enter image description here

现在我想使用以下代码将选定的裁剪区域保存到新的jpg图像:

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
    $targ_w = 200;
    $targ_h = 400;
    $jpeg_quality = 90;

    $src = '';
    $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,NULL,$jpeg_quality);

    exit;
}

?>

我现在的问题是,我如何使用那个$ target我曾经在上面的PHP代码中显示我刚刚上传的图像?

我不知道。

3 个答案:

答案 0 :(得分:3)

上传目标时,您可以将文件路径放入$ _SESSION。在您的uploaded.php中使用此代码(这里使用session_start()启动会话并将形成的目标路径放到$ _SESSION数组中):

 <?php 
 session_start();
 $target = "uploads/"; 
 $target = $target . basename( $_FILES['filename']['name']) ; 
 $_SESSION['target_path'] = $target;

 $ok=1; 
 if(move_uploaded_file($_FILES['filename']['tmp_name'], $target)) 
 {
 echo "De afbeelding *". basename( $_FILES['filename']['name']). "* is geupload naar de map 'uploads'";
 } 
 else {
 echo "Sorry, er is een probleem met het uploaden van de afbeelding.";
 }
?> 

在crop.php中:

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

$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,NULL,$jpeg_quality);

exit;
}

?>

答案 1 :(得分:0)

您需要使用指定的新图片网址重新加载页面,或者将该网址返回给JavaScript,以便您的JS代码可以替换图片而无需重新加载。

答案 2 :(得分:0)

imagejpeg采用已设置为NULL的文件名参数。

您可以使用它将裁剪后的图像存储到服务器上的磁盘,然后在重定向到“showimage.php”或您拥有的任何结果页面时再次加载它。您可以使用Location标头重定向。

您可以使用某种数据库跟踪重新加载/重定向的图像路径,或者如果这是一个快速项目,只需将图像路径存储在cookie /会话变量中。