PHP图像裁剪制作黑色图像

时间:2015-01-30 23:01:50

标签: php image-processing

我对此代码有疑问。代码是一个PHP页面,它接收有关裁剪图像的位置的信息。发送的信息似乎没问题,它的坐标是(x1,y1,x2,y2),但PHP代码只是生成一个黑色图像。虽然,它至少是正确的规模。

关于php我很新鲜,很抱歉,如果这是基本的东西,但我无法找到答案:/

image-cropping php:     

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $targ_w = $_POST['w'];
    $targ_h = $_POST['h'];
    $jpeg_quality = 90;

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

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

    header('Content-type: image/jpeg');
    imagejpeg($dst_r,$src,$jpeg_quality);

    exit;
}
elseif($_SERVER['REQUEST_METHOD'] == 'GET'){
    $src_g = './demo2/pics/' . $_GET['id'] . 'v' . $_GET['v'] . '.jpg';
    if(!file_exists($src_g)){
        die();
    }
}
?>

1 个答案:

答案 0 :(得分:1)

就像我在评论中说的那样,您必须将enctype设置为multipart/form-data才能使您的表单支持文件上传。以下是工作表单的示例:

<form method="POST" enctype="multipart/form-data">
  <input type="file" name="file" id="file" />
  <input type="text" name="x1" value="0" />
  <input type="text" name="y1" value="0" />
  <input type="submit" value="Upload" />
</form>

然后您将检查是否设置了$_FILES数组,然后修改图像并将其输出到浏览器:

// enable error reporting
error_reporting(E_ALL);
ini_set('display_errors', true);

if($_SERVER['REQUEST_METHOD'] == 'POST' && 
   isset($_FILES['file']) && 
   $_FILES['file']['error'] == 0) {

   // create an image resource from the temporary file
   $src = imagecreatefromjpeg($_FILES['file']['tmp_name']);
   // get dimensions of the source image
   $src_w = imagesx($src);
   $src_h = imagesy($src);

   // get offset to copy from 
   $src_x = intval($_POST['x1']);
   $src_y = intval($_POST['y1']);
   $dst_w = $src_w - $src_x;
   $dst_h = $src_h - $src_y;

   // create destination image 
   $dst = imagecreatetruecolor($dst_w, $dst_h);

   // copy the original image based on offset to destination
   // notice that we subtract the offset from the source width and hight
   // so we use `$dst_w` && `$dst_h`
   imagecopyresampled($dst, 
                      $src, 0, 0, 
                      $src_x, $src_y, 
                      $dst_w, $dst_h, 
                      $dst_w, $dst_h);
   // destroy resource
   imagedestroy($src);

   // output the image to the browser
   header('Content-type: image/jpeg');
   imagejpeg($dst);
   imagedestroy($dst);
   exit;
}

请注意,这只是一个快速示例,您应该检查错误等。就像我在评论中所说的那样,总是启用error_reporting,这通常会为您提供有关出错的信息。另外要记住的是,上面的代码假定上传文件实际上是.jpg文件,这也是您可能需要首先验证的文件。

就像您在评论中提到的那样,您可以从表单中发送文件位置。然后你将不得不修改一下代码:

if(isset($_POST['file_path']) && file_exists($_POST['file_path'])) {
   $src = $_POST['img_path'];
   $img_r = imagecreatefromjpeg($src);

<强>参考

POST method uploads in PHP