Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中裁剪图像的一部分并调整其大小_Php_Gd_Thumbnails_Image Manipulation_Crop - Fatal编程技术网

在php中裁剪图像的一部分并调整其大小

在php中裁剪图像的一部分并调整其大小,php,gd,thumbnails,image-manipulation,crop,Php,Gd,Thumbnails,Image Manipulation,Crop,我有一个源图像(可以是任何具有不同维度的图像)。我想能够告诉php一个区域从图像裁剪出来和调整大小。例如: 源图像为800x800像素 PHP选择一个50x50像素的图像区域,选择区域从源图像的上边缘开始80像素,从源图像的左边缘开始100像素 然后将选定区域的大小调整为37x37像素 我尝试使用函数imagecopyresampled()和imagecopyresized(),但它们都给了我一个奇怪的问题:imagecopyresampled()输出选择图像,但被一个与源图像尺寸相等的黑色

我有一个源图像(可以是任何具有不同维度的图像)。我想能够告诉php一个区域从图像裁剪出来和调整大小。例如:

  • 源图像为800x800像素
  • PHP选择一个50x50像素的图像区域,选择区域从源图像的上边缘开始80像素,从源图像的左边缘开始100像素
  • 然后将选定区域的大小调整为37x37像素
我尝试使用函数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项其他任务的详尽脚本。我更愿意理解上面的内容,这样我就可以创建一个最佳的自定义解决方案。

试试我的图像操纵器类,它可以完全满足您的需要-

您的问题实际上是一个逻辑问题。你能检查一下那个被剪掉的吗? 如果它不适合较长部分的作物,则会产生鳞片

    $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是对的。这确实完全符合我的需要,仅此而已。我正在尝试弄清楚如何使其工作,或者至少从源代码中学习。刚刚使其工作。这正是我试图做的,没有任何额外的开销,因此使用它是可以接受的。非常感谢。