这是链接和访问,看看我的意思。
DEMO: http://img01.fr/test4/
如果我尝试将图像裁剪得太小,它会输出正确的尺寸和正确的图像,但你可以看到它周围的灰色。
我不知道如何改变它,这是在javascript中调用的save.php'
:
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
// image name
$name = sha1(uniqid(mt_rand(), true));
// location to save cropped image
$url = 'temp/'.$name.'.jpg';
$dst_x = 0;
$dst_y = 0;
$src_x = $_POST['x']; // crop Start x
$src_y = $_POST['y']; // crop Srart y
$src_w = $_POST['w']; // $src_x + $dst_w
$src_h = $_POST['h']; // $src_y + $dst_h
// set a specific size for the image
// the default is to grab the width and height from the cropped imagee.
$dst_w = 240;
$dst_h = 240;
// remove the base64 part
$base64 = $_POST['image'];
// if URL is a base64 string
if (substr($base64, 0, 5) == 'data:') {
// remove data from image
$base64 = preg_replace('#^data:image/[^;]+;base64,#', '', $base64);
$base64 = base64_decode($base64);
// create image from string
$source = imagecreatefromstring($base64);
}
else {
// strip parameters from URL
$base64 = strtok($base64, '?');
list($height, $width, $type) = getimagesize($base64);
// create image
if ($type == 1)
$source = imagecreatefromgif($base64);
else if ($type == 2)
$source = imagecreatefromjpeg($base64);
else if ($type == 3) {
$source = imagecreatefrompng($base64);
// keep transparent background
//imagealphablending($image, FALSE);
//imagesavealpha($image, TRUE);
}
else die();
}
$image = imagecreatetruecolor($dst_w, $dst_h);
imagecopyresampled($image, $source, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
// save image
imagejpeg($image, $url, 100);
// return URL
$validation = array (
'url' => $url
);
echo json_encode($validation);
}
我希望周围只有白色,而不是灰色的东西。我怎么能这样做?
答案 0 :(得分:0)
您需要在复制重采样之前填充图像:
$image = imagecreatetruecolor($dst_w, $dst_h);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
imagecopyresampled($image, $source, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);
我也看到JavaScript传递了无效的x,y,w和h参数,然后PHP脚本使用这些参数来调整图像大小。例如,我试用了该页面并发送了以下POST参数:
x=-297.61904761904765&y=-297.61904761904765&w=595.2380952380953&h=595.2380952380953
因为输入图像仅为250×500,所以{5}对于$src_w
或$src_h
来说都太大了。负数也没有意义。