php imagecopyresampled添加黑色背景

Sco*_*ott 8 php gd resize

我有一个调整大小的图像脚本,它采用130x81图像并将其添加到130x130图像,当imagecopyresampled函数运行时,它会在剩余的空间中添加黑色背景,即使基本图像是白色的.下面的代码,我真的很感激一些帮助.

我试图合并到创建的130x130文件的图像是: 130x81图像

$width = 130;
$height = 130;
$filename = 'process-add.jpg'; //130x81px jpg
$this->_image = imagecreatefromjpeg($filename);

$background = imagecreatetruecolor(130,130);//create the background 130x130
$whiteBackground = imagecolorallocate($background, 255, 255, 255); 
imagefill($background,0,0,$whiteBackground); // fill the background with white

imagecopyresampled($background, $this->_image,(130-$width)/2,(130-$height)/2, 0, 0, $width, $height, $width, $height); // copy the image to the background

ImageJpeg ($background,null,100); //display
Run Code Online (Sandbox Code Playgroud)

我已阅读多个帖子添加:

imagealphablending($background, false);
Run Code Online (Sandbox Code Playgroud)

进入应修复它的代码,但它没有任何区别.

提前致谢!

Sco*_*ott 18

这已经解决了.问题在于imagecopyresampled调用的宽度和高度.请参阅下面的代码块:

<?

ini_set('allow_url_fopen', true);
$filename = 'http://img.yessy.com/1402152287-17201a.jpg'; // 130x81
$image = imagecreatefromjpeg($filename);
list($originalWidth, $originalHeight) = getimagesize($filename);

// Size of image to create
$width = 130;
$height = 130;

$background = imagecreatetruecolor($width, $height);//create the background 130x130
$whiteBackground = imagecolorallocate($background, 255, 255, 255); 
imagefill($background,0,0,$whiteBackground); // fill the background with white

imagecopyresampled($background, $image, 0, ($height - $originalHeight) / 2, 0, 0, $originalWidth, $originalHeight, $originalWidth, $originalHeight); // copy the image to the background

header("Content-type: image/jpeg");
ImageJpeg ($background,null,100); //display
?>
Run Code Online (Sandbox Code Playgroud)

  • 有人可以解释为什么这有效吗?我也有类似的情况,上传的内容被任意放置在已知高度/宽度的“边界框”中,并且很想知道如何找出我需要的正确值。 (2认同)