使用 Jcrop 裁剪并使用 PHP GD 保存时如何获取可变宽度和高度
Posted
技术标签:
【中文标题】使用 Jcrop 裁剪并使用 PHP GD 保存时如何获取可变宽度和高度【英文标题】:How to get variable width & height when cropping with Jcrop and save with PHP GD 【发布时间】:2012-11-29 03:36:43 【问题描述】:我有一个应用程序必须裁剪宽度和高度可变的图像。但我不知道如何使用 php gd (Createimagefromjpeg) 函数来做到这一点
在我的代码中:
$targ_w = 400;
$targ_h = 400;
这意味着裁剪后的图像将始终具有此宽度和高度。那不是我想要的。我想以某种方式裁剪图像并像我在裁剪区域中选择它一样裁剪它,就像这张图片一样:
现在,当我裁剪该图像时,就像在图片中一样,我得到了:
这是一个方形图像,因为我必须给出宽度和高度。但是在我裁剪的每张图片上,尺寸都是不同的。
有没有办法(变量、id 等)来做到这一点?
谢谢:D
编辑:我创建裁剪图像的代码:
<!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>
我上传图片的代码:
<!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 © Kees Sonnema & Jan Beetsma
</div>
</body>
</html>
我使用 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>
【问题讨论】:
【参考方案1】:换行
$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );
到
$dst_r = imagecreatetruecolor($_POST['w'], $_POST['h']);
=> 这将创建一个带有选定区域的新图像,您可以删除 $targ_w 和 $targ_h 变量。
然后换行
imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'],
$targ_w,$targ_h,$_POST['w'],$_POST['h']);
到
imagecopy(
$dst_r, $img_r,
0, 0, $_POST['x'], $_POST['y'],
$_POST['w'], $_POST['h']
);
【讨论】:
我无法使用此代码。他不保存/显示裁剪的图像。它只是给出一个空白页。 是否创建了裁剪图像?注释掉最后 2 行并在脚本顶部添加 error_reporting(-1) 以显示最终错误。 我把最后一行改成使用header()而不是readfile(),还是不行? 此代码不起作用。它给出了一个错误。但我看不出错误是什么。 哦,我忘记在 $_POST['x'), $_POST['y'] 行的 imagecopy() 函数中添加逗号 ...以上是关于使用 Jcrop 裁剪并使用 PHP GD 保存时如何获取可变宽度和高度的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PHP 将裁剪后的图像保存到带有 Jcrop 的目录