PHP GD:使用一些黑色矩形重新调整图像大小?
我试着用两天的时间来完成这项任务,在网上阅读了各种各样的东西,但仍然无法发现发生了什么,也在这里阅读了所有关于类似问题的文章,但什么都没有 我有400x400的图像,想用php gd生成120x120。使用此代码:PHP GD:使用一些黑色矩形重新调整图像大小?,php,gd,Php,Gd,我试着用两天的时间来完成这项任务,在网上阅读了各种各样的东西,但仍然无法发现发生了什么,也在这里阅读了所有关于类似问题的文章,但什么都没有 我有400x400的图像,想用php gd生成120x120。使用此代码: $image_p = imagecreatetruecolor(120,120); $image = imagecreatefromstring($X_IMAGE); imagecopyresampled($im
$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,左右部分稍微修剪一下
- 是否要将黑色矩形替换为白色矩形,以这种方式填充重新采样的图像
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,