在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项任务的详尽脚本。我宁愿了解以上所以我可以创建一个最佳的自定义解决方案。

+0

请发布您目前使用的代码。我的猜测是你没有正确使用'imagecopyresized'。 – 2010-10-27 06:17:35

+0

你有没有检查这里的例子:http://www.php.net/manual/en/function.imagecopyresized.php? – 2010-10-27 06:18:25

+0

检查了PHP手册 - 大部分功能似乎尝试和保持比例或只调整整个图像。 Alin,我更新了自己的帖子,按照要求添加了现有代码的示例。 – user396404 2010-10-27 06:22:57

+0

是的,但是我的行为并没有超出规定的操作范围。至少,他们可以阅读一个工作示例的源代码 – Phil 2010-10-27 06:23:12

+0

我试图避免现有的解决方案,但菲尔是正确的..这实际上确实按照我的需要做,只是没有更多。我正试图弄清楚如何让它现在起作用,或者至少从源头上学习。 – user396404 2010-10-27 06:31:48

+0

刚刚工作。这正是我想要做的,没有任何额外的开销,所以使用这个是可以接受的。非常感谢你。 – 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);