GD 库在服务器中的执行方式不同



我在实时站点中使用GD库时的图像出现问题。 Linux 中的 GD 库有问题吗?我使用 GD 库实现了图像大小调整和裁剪,但不知何故只有调整大小有效。此外,调整大小后,png 图像具有黑色背景。我的代码在本地完全正常工作,但在我托管的站点中则不然。我没有收到任何错误,所以我不确定问题出在哪里。

这是我的代码:

$info = getimagesize($src);
$source_image = '';
if ($info['mime'] == 'image/jpeg')
$source_image = imagecreatefromjpeg($src);
elseif ($info['mime'] == 'image/gif')
$source_image = imagecreatefromgif($src);
elseif ($info['mime'] == 'image/png')
$source_image = imagecreatefrompng($src);
$cropped = imagecropauto($source_image, IMG_CROP_DEFAULT);
if ($cropped !== false) {
imagedestroy($source_image);
$source_image = $cropped;
}
$width = imagesx($source_image);
$height = imagesy($source_image);
$maxHeight = floor($height * ($maxWidth / $width));
$dst = imagecreatetruecolor($maxWidth, $maxHeight);
$background = imagecolorallocate($dst, 0, 0, 0);
imagecolortransparent($dst, $background);
imagealphablending($dst, false);
imagesavealpha($dst,true);
imagecopyresampled($dst, $source_image, 0, 0, 0, 0, $maxWidth, $maxHeight, $width, $height);
if ($info['mime'] == 'image/jpeg')
imagejpeg($dst, $newFilename);
elseif ($info['mime'] == 'image/gif')
imagegif($dst, $newFilename);
elseif ($info['mime'] == 'image/png')
imagepng($dst, $newFilename);

请帮忙。谢谢

将IMG_CROP_DEFAULT替换为IMG_CROP_SIDES 另请阅读文档 点击这里 你也用

<?php
// Create a 300x300px transparant image with a 100px wide red circle in the middle
$i = imagecreatetruecolor(300, 300);
imagealphablending($i, FALSE);
imagesavealpha($i, TRUE);
$transparant = imagecolorallocatealpha($i, 0xDD, 0xDD, 0xDD, 0x7F);
imagecolortransparent($i, $transparant); // Set background transparent
imagefill($i, 0, 0, $transparant);
$red = imagecolorallocate($i, 0xFF, 0x0, 0x0);
imagefilledellipse($i, 150, 150, 100, 100, $red);
imagepng($i, "red_300.png");
// Crop away transparant parts and save
$i2 = imagecropauto($i, IMG_CROP_DEFAULT); //Attempts to use IMG_CROP_TRANSPARENT and if it fails it falls back to IMG_CROP_SIDES.
imagepng($i2, "red_crop_trans.png");
imagedestroy($i2);
// Crop away bg-color parts and save
$i2 = imagecropauto($i, IMG_CROP_SIDES);
imagepng($i2, "red_crop_sides.png");
imagedestroy($i2);
// clean up org image
imagedestroy($i);
?>

最新更新