我对此代码有疑问。代码是一个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();
}
}
?>
答案 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);
<强>参考强>