我有一个源图像(可以是任何具有不同尺寸的图像)。我希望能够从图像中告诉php一个区域来裁剪和调整大小。例如:
我尝试使用函数imagecopyresampled()和imagecopyresized(),但它们都给了我一个奇怪的问题:imagecopyresampled()输出选择图像但被一个等同于源图像尺寸的黑色区域包围。 imagecopyresized()也会选择所选区域,但它只是覆盖在源图像上。这里的最终目标是从源图像制作缩略图。
我已经使用的代码示例是:
list($width_orig, $height_orig) = getimagesize($filename);
imagecopyresized($image_final, $image, 0, 0, 0, 0, 37, 37, $width_orig, $height_orig);
上述内容与该任务描述的完全不同,但它演示了我遇到的问题。
注意:
据我所知,对这个主题进行搜索会产生很多结果,但它们主要引用的库和类比我实际需要的要多得多。我宁愿了解解决方案并实现更有效的方法。因此,我不希望被指向完成上述任务和其他50项任务的详尽脚本。我宁愿理解以上内容,这样我就可以创建一个最佳的自定义解决方案。
答案 0 :(得分:2)
你的问题实际上是一个逻辑问题。你能检查一下吗? 如果它不适合作物长度的缩放比例。
$w = imagesx($img);
$h = imagesy($img);
$newImage = imagecreatetruecolor($wNewOrj, $hNewOrj);
if(($w/$h)<($wNewOrj/$hNewOrj)){
$hNew = $h * $wNewOrj/$w;
$wNew = $wNewOrj;
}else{
$hNew = $hNewOrj;
$wNew = $w * $hNewOrj/$h;
}
$wDiff = round(abs($wNewOrj-$wNew)/2);
$hDiff = round(abs($hNewOrj-$hNew)/2);
imagecopyresampled($newImage, $img,
0, 0, $wDiff, $hDiff,
$wNew, $hNew, $w-$wDiff, $h-$hDiff);
imagejpeg($newImage, $path, 85);
答案 1 :(得分:0)
尝试我的图像操纵器类,它完全符合您的要求 - http://github.com/philBrown/Tolerable/blob/master/library/Tolerable/Image/Manipulator.php