在php中裁剪图像的一部分并调整其大小
我有一个源图像(可以是任何具有不同维度的图像)。我想能够告诉php一个区域从图像裁剪出来和调整大小。例如:在php中裁剪图像的一部分并调整其大小,php,gd,thumbnails,image-manipulation,crop,Php,Gd,Thumbnails,Image Manipulation,Crop,我有一个源图像(可以是任何具有不同维度的图像)。我想能够告诉php一个区域从图像裁剪出来和调整大小。例如: 源图像为800x800像素 PHP选择一个50x50像素的图像区域,选择区域从源图像的上边缘开始80像素,从源图像的左边缘开始100像素 然后将选定区域的大小调整为37x37像素 我尝试使用函数imagecopyresampled()和imagecopyresized(),但它们都给了我一个奇怪的问题:imagecopyresampled()输出选择图像,但被一个与源图像尺寸相等的黑色
- 源图像为800x800像素
- PHP选择一个50x50像素的图像区域,选择区域从源图像的上边缘开始80像素,从源图像的左边缘开始100像素
- 然后将选定区域的大小调整为37x37像素
list($width_orig, $height_orig) = getimagesize($filename);
imagecopyresized($image_final, $image, 0, 0, 0, 0, 37, 37, $width_orig, $height_orig);
上面的操作与任务描述的不完全一样,但它说明了我遇到的问题
注意:
我知道对这个主题进行搜索会得到很多结果,但它们大多引用了比我实际需要做得更多的库和类。我宁愿了解解决方案并实施更有效的方案。因此,我不希望被指向完成上述任务和50项其他任务的详尽脚本。我更愿意理解上面的内容,这样我就可以创建一个最佳的自定义解决方案。试试我的图像操纵器类,它可以完全满足您的需要-您的问题实际上是一个逻辑问题。你能检查一下那个被剪掉的吗? 如果它不适合较长部分的作物,则会产生鳞片
$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);
$w=imagesx($img);
$h=imagesy($img);
$newImage=imageCreateTureColor($wNewOrj,$hNewOrj);
如果($w/$h)请发布到目前为止您拥有的代码。我猜您没有正确使用imagecopyresized
。您是否检查了这里的示例:?查看了php手册-大多数函数似乎都试图保持比例,或者只是调整整张图像的大小。Alin,我更新了我的帖子,根据要求添加了一个现有代码的示例。我看到了这里您选择并调整整个图像的大小,而不仅仅是一个50x50的正方形。您真正想要的是什么?调整用户定义(正方形)的大小图像的区域或整个图像的裁剪缩略图?用户定义的方形区域的大小调整。phil提供的类完全没有任何额外功能,所以我正在使用它。是的,但我的类只执行所需的操作。至少,他们可以读取工作示例的源代码。我试图避免现有的解决方案,但Phil是对的。这确实完全符合我的需要,仅此而已。我正在尝试弄清楚如何使其工作,或者至少从源代码中学习。刚刚使其工作。这正是我试图做的,没有任何额外的开销,因此使用它是可以接受的。非常感谢。