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

时间:2013-01-02 17:17:53

标签: php image-processing

我有一个图库工具,其中所有图像都必须适合515px X 343px空间,同时居中。我保留了比例,并成功地将图像置于该空间中,两侧(顶部,右侧,底部,左侧)的黑色背景在调整大小后保持打开状态。图像可能比给定的规格更高或更宽。

我需要将黑色背景设为白色并尝试按照此问题提出的答案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行用静态量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行,那么生成的图像都是白色的。

我还相信,在对我的图像应用任何调整大小操作之前,我会用全白图像充满图像。

1 个答案:

答案 0 :(得分:3)

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

<?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);
?>