【发布时间】:2026-01-09 05:35:01
【问题描述】:
我正在使用 imagecopy 将 PNG 图像裁剪为用户规范。
目前,如果裁剪区域大于图像,任何“额外空间”都会变成黑色,但我希望它是白色的。
找了一堆,发现可以使用imagefill或者imagefillrectangle来让背景变白,但是如果在imagecopy之前完成,那么它没有效果,如果在imagecopy之后完成,它也会使任何图像的黑色部分为白色。
我的代码目前看起来像这样,原始图像的黑色部分变成白色以及额外的空间:
// Input and output files
$infile = "[Image]";
$outfile = "[Output path for image]"
// Make the image
$orig =imagecreatefromjpeg($infile);
$width = imagesx($orig);
$height = imagesy($orig);
$new = imagecreatetruecolor($width, $height);
// Crop the image
imagecopy($new, $orig, 0, 0, -100, 100, $width, $height);
// Try and make the extra space white
$white = imagecolorallocate($new, 255,255,255);
imagefill($new, 0, 0, $white);
// Save the file
imagepng($new, $outfile);
如何在不影响原始图像的情况下使多余的空间变白?我无法控制用户可能上传的图片,因此我无法选择透明颜色,因为该颜色可能是他们原始图片的一部分。
编辑:当用户选择原始图像尺寸之外的裁剪尺寸时,就会出现这种情况,我确实希望这是一个有效的选项。裁剪是强制一个方形图像,但如果用户上传一个横向矩形并希望他们的所有图像都在最终裁剪中,那么裁剪将在顶部和底部的图像之外(这是我希望它是白色而不是黑色)
【问题讨论】: