Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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 GD:使用一些黑色矩形重新调整图像大小?_Php_Gd - Fatal编程技术网

PHP GD:使用一些黑色矩形重新调整图像大小?

PHP GD:使用一些黑色矩形重新调整图像大小?,php,gd,Php,Gd,我试着用两天的时间来完成这项任务,在网上阅读了各种各样的东西,但仍然无法发现发生了什么,也在这里阅读了所有关于类似问题的文章,但什么都没有 我有400x400的图像,想用php gd生成120x120。使用此代码: $image_p = imagecreatetruecolor(120,120); $image = imagecreatefromstring($X_IMAGE); imagecopyresampled($im

我试着用两天的时间来完成这项任务,在网上阅读了各种各样的东西,但仍然无法发现发生了什么,也在这里阅读了所有关于类似问题的文章,但什么都没有

我有400x400的图像,想用php gd生成120x120。使用此代码:

                    $image_p = imagecreatetruecolor(120,120);
        $image = imagecreatefromstring($X_IMAGE);
        imagecopyresampled($image_p, $image, 0, 0, 0, 0, 120, 120, 400, 400);
    // RETURN
            header('Content-Type: image/jpeg');
            imagejpeg($image_p, null, 70);
            //destroy...
$X_图像是400x400 JPG,存储为字符串。
所有图像都是在120x120中生成的,但大多数图像的底部都有一些黑色矩形,在一些图片上它更大,在一些图片上它更小,但有50%的图像都带有该正方形。所以一切都是可见的,只是图像的一部分被黑色覆盖。我的问题有什么解决办法?所有源图像都是JPG,我需要的120x120也都是JPG,正如您所看到的…

问题是您的原始图像不是正方形!您将400x400传递给
imagecopyresampled
,但原始图像的高度可能不是400px

例如,在您发布的图像中,您有一个非方形的原始图像。当您告诉PHP对另一个图像资源上的一个正方形进行重采样时,您将对该图像加上底部不存在的矩形进行重采样

解决方案取决于您想要输出的内容

  • 你想要一个保持比例的缩放图像吗?例如,从400x300到120x90
  • 还是缩放后的图像无法保持比例?例如,从400x300到变形的120x120
  • 还是剪下的缩略图?400x300到120x120,左右部分稍微修剪一下

  • 是否要将黑色矩形替换为白色矩形,以这种方式填充重新采样的图像

问题在于您的原始图像不是正方形!您将400x400传递给
imagecopyresampled
,但原始图像的高度可能不是400px

例如,在您发布的图像中,您有一个非方形的原始图像。当您告诉PHP对另一个图像资源上的一个正方形进行重采样时,您将对该图像加上底部不存在的矩形进行重采样

解决方案取决于您想要输出的内容

  • 你想要一个保持比例的缩放图像吗?例如,从400x300到120x90
  • 还是缩放后的图像无法保持比例?例如,从400x300到变形的120x120
  • 还是剪下的缩略图?400x300到120x120,左右部分稍微修剪一下

  • 是否要将黑色矩形替换为白色矩形,以这种方式填充重新采样的图像


您的代码看起来正常。
$X_IMAGE
包含哪些内容?如果仅将最后一行替换为
imagejpeg($IMAGE,null,70),则输出是什么?$X_图像是以字符串形式存储在数据库中的400x400图像。当我删除“imagejpeg($image,null,70);”时,图像不会显示。此外,“黑色矩形”从不覆盖图像上的图像,例如,如果这是一双鞋或其他产品,它总是100%可见,下面我看到黑色矩形,其中该矩形的高度为10-20像素,有时为100-120像素,但始终是100%的新创建图像=120像素OK。我要求您尝试编辑最后一行,以便输出原始的
$image
,而不是重新采样的
$image\p
。只是想看看GD是否也在源图像上渲染黑色矩形(因此,我们可以排除重采样问题)。好的,我尝试了$image的输出,在这种情况下图像是可以的,但仍然是400x400 imgs:)有什么想法吗?您的代码看起来不错。
$X_IMAGE
包含哪些内容?如果仅将最后一行替换为
imagejpeg($IMAGE,null,70),则输出是什么?$X_图像是以字符串形式存储在数据库中的400x400图像。当我删除“imagejpeg($image,null,70);”时,图像不会显示。此外,“黑色矩形”从不覆盖图像上的图像,例如,如果这是一双鞋或其他产品,它总是100%可见,下面我看到黑色矩形,其中该矩形的高度为10-20像素,有时为100-120像素,但始终是100%的新创建图像=120像素OK。我要求您尝试编辑最后一行,以便输出原始的
$image
,而不是重新采样的
$image\p
。只是想看看GD是否也在源图像上渲染黑色矩形(因此,我们可以排除重采样问题)。好的,我尝试了$image的输出,在这种情况下图像是可以的,但仍然是400x400 imgs:)有什么想法吗?“你想用白色矩形替换黑色矩形,所以用那种方式填充重采样的图像”,没错!,如何做到这一点?在输出之前,尝试执行
imagefill($image\u p,0,120-1,imagecolorallocate($image\u p,255,255,255))。或者,就在第一行代码
imagefill($image_p,0,0,imagecolorallocate($image_p,255,255,255))之后。两种都试一下。好的,它有效!非常感谢!我尝试了5000个样本,在以前的尝试中,它返回了大约50%的带有back block的图像,现在在输出之前添加了这个,一切都很完美!再次感谢。现在我只是不明白:我知道这个函数用白色填充新图像的空间,但为什么坐标是“120-1”,为什么“120”不起作用,而“120-1”起作用?无论如何,谢谢你帮我省了一天的时间,但你想知道这是怎么回事吗?这个函数用颜色填充图像的一部分,就像老式的MS Paint一样。我刚刚用白色填充了你的图像,从最左边的底部像素开始。简单地说,图像的最后一行是Y坐标上的119,因为第一行是0而不是1。请点击大票数下的勾号接受我的答案。非常感谢您的解答和解释!“是否要将黑色矩形替换为白色矩形,以这种方式填充重新采样的图像”,完全正确!,如何做到这一点?在输出之前,尝试执行
imagefill($image\u p,0,120-1,imagecolorallocate($image\u p,255,255,255))。或者,就在第一行代码
imagefill($image\u p,0,0,imagecolorallocate($image\u p,