关于imagecopyresized函数@TOC
这是我准备好的图片
imagecopyresized执行后
可以看出,比例很好,好的是一个标准的正方形
我的代码如下
$imgstream = file_get_contents($image);
$im = imagecreatefromstring($imgstream);
$x = imagesx($im);//获取图片的宽
$y = imagesy($im);//获取图片的高
$src_ratio = $x/$y;
// 缩略后的大小
$xx = 600;
$yy = 400;
$dis_ratio = $xx/$yy;
if($dis_ratio>$src_ratio){
$sx = 0;
$sy = ($y-ceil($x/$dis_ratio))/2;
$thumbw = $x;
$thumbh = ceil($x/$dis_ratio);
} else {
$sy = 0;
$sx = ($x-$y*$dis_ratio)/2;
$thumbw = $y*$dis_ratio;
$thumbh = $y;
}
if(function_exists("imagecreatetruecolor")) {
$dim = imagecreatetruecolor($xx, $yy); // 创建目标图gd2
} else {
$dim = imagecreate($xx, $yy); // 创建目标图gd1
}
imagecopyresized($dim,$im,0,0,$sx,$sy,400,600,$thumbh,$thumbw);
可以看出,是函数自身的问题,和imagecopyresampled效果相同
解决方法未知。
补充:
现发现,剪切和缩放同时进行不了,可能是水平太低~~~
找到一个的函数完美解决
function imagepress($filepath, $new_width, $new_height)
{
$source_info = getimagesize($filepath);
$source_width = $source_info[0];
$source_height = $source_info[1];
$source_mime = $source_info['mime'];
$source_ratio = $source_height / $source_width;
$target_ratio = $new_height / $new_width;
// 源图过高
if ($source_ratio > $target_ratio)
{
$cropped_width = $source_width;
$cropped_height = $source_width * $target_ratio;
$source_x = 0;
$source_y = ($source_height - $cropped_height) / 2;
}
// 源图过宽
else if ($source_ratio < $target_ratio)
{
$cropped_width = $source_height / $target_ratio;
$cropped_height = $source_height;
$source_x = ($source_width - $cropped_width) / 2;
$source_y = 0;
}
// 源图适中
else
{
$cropped_width = $source_width;
$cropped_height = $source_height;
$source_x = 0;
$source_y = 0;
}
switch ($source_mime)
{
case 'image/gif':
$source_image = imagecreatefromgif($filepath);
break;
case 'image/jpeg':
$source_image = imagecreatefromjpeg($filepath);
break;
case 'image/png':
$source_image = imagecreatefrompng($filepath);
break;
default:
return false;
break;
}
$target_image = imagecreatetruecolor($new_width, $new_height);
$cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);
// 裁剪
imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);
// 缩放
imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $new_width, $new_height, $cropped_width, $cropped_height);
//header('Content-Type: image/jpeg');
imagejpeg ($target_image,'var.jpg');
$string=file_get_contents('var.jpg');
unlink('var.jpg');
return $string;
}