在PHP中裁剪图像的一部分,并调整它的大小
我有一个源图像(可以是任何图像,并具有不同的尺寸)。我希望能够从图像中区分出一个区域来裁剪和调整大小。例如:在PHP中裁剪图像的一部分,并调整它的大小
- 源图像是800x800像素。
- PHP选择图像的50x50像素区域,选择区域从源图像的上边缘开始80像素,距离源图像的左边缘100像素
- 然后将所选区域调整为37x37像素。
我尝试使用()imagecopyresized()imagecopyresampled的功能和,但它们都给我一个奇怪的问题:imagecopyresampled()输出的选择图像,而是由黑色区域等效于源图像的尺寸的包围。 imagecopyresized()也会选择所选区域,但它只是覆盖在源图像上。这里的最终目标是从源图像制作缩略图。
我已经使用该代码的一个例子是:
list($width_orig, $height_orig) = getimagesize($filename);
imagecopyresized($image_final, $image, 0, 0, 0, 0, 37, 37, $width_orig, $height_orig);
上面没有做完全一样的任务描述,但它证明了我遇到的问题。
注:
我了解,这样在这个话题的搜索导致了不少成果,但他们大多引用做了很多比我更实际需要的类和库。我宁愿理解解决方案并实施更高效的方法。因此,我不打算指出完成上述任务和其他50项任务的详尽脚本。我宁愿了解以上所以我可以创建一个最佳的自定义解决方案。
试试我的形象操纵类,它正是你想要的 - http://github.com/philBrown/Tolerable/blob/master/library/Tolerable/Image/Manipulator.php
是的,但是我的行为并没有超出规定的操作范围。至少,他们可以阅读一个工作示例的源代码 – Phil 2010-10-27 06:23:12
我试图避免现有的解决方案,但菲尔是正确的..这实际上确实按照我的需要做,只是没有更多。我正试图弄清楚如何让它现在起作用,或者至少从源头上学习。 – user396404 2010-10-27 06:31:48
刚刚工作。这正是我想要做的,没有任何额外的开销,所以使用这个是可以接受的。非常感谢你。 – user396404 2010-10-27 06:35:53
你的问题其实是一个逻辑问题。你能检查一下被剪断吗? 如果它不适合作物长出一部分,则称为尺度。
$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);
请发布您目前使用的代码。我的猜测是你没有正确使用'imagecopyresized'。 – 2010-10-27 06:17:35
你有没有检查这里的例子:http://www.php.net/manual/en/function.imagecopyresized.php? – 2010-10-27 06:18:25
检查了PHP手册 - 大部分功能似乎尝试和保持比例或只调整整个图像。 Alin,我更新了自己的帖子,按照要求添加了现有代码的示例。 – user396404 2010-10-27 06:22:57