PHP在imagecreatetruecolor()之后对白色背景使用imagefill()的问题

ktca8awb  于 2023-11-16  发布在  PHP
关注(0)|答案(1)|浏览(98)

我有一个画廊工具,其中我所有的图像都必须适合515 px X 343 px的空间,同时被居中。我保留了比例,并成功地将图像集中在该空间中,两侧(顶部,右侧,底部,左侧)都是黑色背景。在调整大小后,图像可能会更高或更宽。
我需要使黑色背景变成白色,并尝试按照这个问题的答案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 
}

字符串
变量$framwidth = 515,$framheight = 343,$fromMidX是x坐标偏移量。如果我在第2行用静态量510替换$rightOffset,右侧仍然是全黑的(即使是最后5 px)。更好的是,我注解掉第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行,那么生成的图像全部为白色。
我还认为,我是洪水的形象与所有白色之前,适用于我的形象任何反色操作。

kq0g1dla

kq0g1dla1#

加载请求的图像后尝试重新填充右侧?

<?php
$source = imagecreatefromjpeg($image); //Line 3
$file1new = imagecreatetruecolor($framewidth, $frameheight);

$white = imagecolorallocate($file1new, 255, 255, 255);
//fill whole image with white color
imagefill($file1new, 0, 0, $white);  //Line 1

//find right side of image
$rightOffset = ($framewidth - $fromMidX) + 1;

//insert source file into new image
imagecopyresampled($file1new, $source , $fromMidX, $fromMidY , 0, 0, $framewidth, $frameheight, $w, $h); //Line 4

//fill image right hand side with white
imagefill($file1new, $rightOffset, 0, $white); //Line 2 

imagejpeg($file1new, $image,85);
imagedestroy($file1new);
?>

字符串

相关问题