我有一个图库工具,其中我的所有图像都必须适合 515 像素 X 343 像素的空间,同时居中。我保留了比例,并成功地将图像居中在该空间中,两侧有黑色背景(顶部、右侧、底部、左侧)在调整大小后始终保持打开状态。图像可能比给定规格更高或更宽。
我需要将黑色背景设为白色,并尝试按照此问题中建议的答案imagescreatetruecolor with a white background 在更高的图像上,我成功地将左侧变为白色,但无法将图像的右侧变为白色. 这是我的代码的一部分。
$file1new = imagecreatetruecolor($framewidth, $frameheight);
if(isset($fromMidX) && $fromMidX > 0){
$white = imagecolorallocate($file1new, 255, 255, 255);
$rightOffset = ($framewidth - $fromMidX) + 1;
imagefill($file1new, 0, 0, $white); //Line 1
imagefill($file1new, $rightOffset, 0, $white); //Line 2
}
变量 $framewidth = 515, $framheight = 343, $fromMidX 是 x 坐标偏移量。如果我在第 2 行将 $rightOffset 替换为 510 的静态量,则右侧仍然是全黑的(即使是最后 5 像素)。更好的是,我注释掉第 1 行而不是第 2 行,左侧保持白色,右侧保持黑色。
我理解 imagefill() 如何工作的方式是,它从给定的 X、Y 坐标开始,并用新颜色填充该像素的任何颜色,在我的例子中是 255,255,255。所以我想我只在一侧得到白色的原因是因为我的图像将画布一分为二。这就是我为右侧添加第二个 imagefill() 的原因。
唯一让我感动的是,我什至在将上传图像的对象带入方程之前就使用了 imagefill()。所以我不知道这会如何影响被白色填充的东西。
任何见解将不胜感激。
编辑1:在上面的代码之后我有这个:
$source = imagecreatefromjpeg($image); //Line 3
imagecopyresampled($file1new, $source , $fromMidX, $fromMidY , 0, 0, $framewidth, /$frameheight, $w, $h); //Line 4
imagejpeg($file1new, $image,85);
imagedestroy($file1new);
变量 $image 是我上传后的图片的位置
move_uploaded_file($_FILES['image']['tmp_name'], $location);
$image = $location;
如果我注释掉第 3 行和第 4 行,那么生成的图像全是白色的。
我还相信在对图像应用任何调整大小操作之前,我会用全白填充图像。