|
|
@@ -340,19 +340,25 @@ class UtilService
|
|
|
|
|
|
// 如果是圆形,先创建圆形图片
|
|
|
if ($val['circle']) {
|
|
|
+ // 创建一个新的画布用于圆形头像
|
|
|
$canvas = imagecreatetruecolor($val['width'], $val['height']);
|
|
|
- imagefill($canvas, 0, 0, imagecolorallocatealpha($canvas, 0, 0, 0, 127));
|
|
|
+
|
|
|
+ // 创建透明背景
|
|
|
+ imagesavealpha($canvas, true);
|
|
|
+ $transparent = imagecolorallocatealpha($canvas, 0, 0, 0, 127);
|
|
|
+ imagefill($canvas, 0, 0, $transparent);
|
|
|
|
|
|
// 创建圆形蒙版
|
|
|
$mask = imagecreatetruecolor($val['width'], $val['height']);
|
|
|
- $transparent = imagecolorallocate($mask, 255, 0, 0);
|
|
|
- imagecolortransparent($mask, $transparent);
|
|
|
- imagefill($mask, 0, 0, $transparent);
|
|
|
+ imagefill($mask, 0, 0, imagecolorallocate($mask, 255, 0, 0));
|
|
|
+
|
|
|
+ // 绘制圆形
|
|
|
+ imagefilledellipse($mask, $val['width']/2, $val['height']/2, $val['width'], $val['height'], imagecolorallocate($mask, 0, 0, 0));
|
|
|
|
|
|
- $black = imagecolorallocate($mask, 0, 0, 0);
|
|
|
- imagefilledellipse($mask, $val['width']/2, $val['height']/2, $val['width'], $val['height'], $black);
|
|
|
+ // 设置红色为透明色
|
|
|
+ imagecolortransparent($mask, imagecolorallocate($mask, 255, 0, 0));
|
|
|
|
|
|
- // 将原图缩放并裁剪到圆形
|
|
|
+ // 将原图缩放到圆形大小
|
|
|
$sourceResized = imagecreatetruecolor($val['width'], $val['height']);
|
|
|
imagecopyresampled($sourceResized, $res, 0, 0, 0, 0, $val['width'], $val['height'], $resWidth, $resHeight);
|
|
|
|
|
|
@@ -360,12 +366,13 @@ class UtilService
|
|
|
imagecopy($canvas, $sourceResized, 0, 0, 0, 0, $val['width'], $val['height']);
|
|
|
imagecopymerge($canvas, $mask, 0, 0, 0, 0, $val['width'], $val['height'], 100);
|
|
|
|
|
|
- // 将透明背景设置为白色(如果不想要白色背景,可以调整这里的颜色)
|
|
|
+ // 将透明背景设置为白色(可选)
|
|
|
$white = imagecolorallocate($canvas, 255, 255, 255);
|
|
|
for ($x = 0; $x < $val['width']; $x++) {
|
|
|
for ($y = 0; $y < $val['height']; $y++) {
|
|
|
- $color = imagecolorsforindex($canvas, imagecolorat($canvas, $x, $y));
|
|
|
- if ($color['alpha'] == 127) {
|
|
|
+ $rgba = imagecolorat($canvas, $x, $y);
|
|
|
+ $alpha = ($rgba >> 24) & 0x7F;
|
|
|
+ if ($alpha > 100) {
|
|
|
imagesetpixel($canvas, $x, $y, $white);
|
|
|
}
|
|
|
}
|
|
|
@@ -373,20 +380,23 @@ class UtilService
|
|
|
|
|
|
imagedestroy($sourceResized);
|
|
|
imagedestroy($mask);
|
|
|
+ imagedestroy($res);
|
|
|
} else {
|
|
|
// 非圆形,按原逻辑处理
|
|
|
$canvas = imagecreatetruecolor($val['width'], $val['height']);
|
|
|
- imagefill($canvas, 0, 0, $color);
|
|
|
+ // 修正这里:使用正确的颜色填充
|
|
|
+ $bgColor = imagecolorallocate($canvas, 255, 255, 255); // 使用白色背景
|
|
|
+ imagefill($canvas, 0, 0, $bgColor);
|
|
|
imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'], $resWidth, $resHeight);
|
|
|
+ imagedestroy($res);
|
|
|
}
|
|
|
|
|
|
$val['left'] = $val['left'] < 0 ? $backgroundWidth - abs($val['left']) - $val['width'] : $val['left'];
|
|
|
$val['top'] = $val['top'] < 0 ? $backgroundHeight - abs($val['top']) - $val['height'] : $val['top'];
|
|
|
|
|
|
- // 修改合并方式,支持透明度
|
|
|
- imagecopymerge($imageRes, $canvas, $val['left'], $val['top'], $val['right'], $val['bottom'], $val['width'], $val['height'], $val['opacity']);
|
|
|
+ // 修正:使用正确的imagecopymerge参数
|
|
|
+ imagecopymerge($imageRes, $canvas, $val['left'], $val['top'], 0, 0, $val['width'], $val['height'], $val['opacity']);
|
|
|
|
|
|
- imagedestroy($res);
|
|
|
imagedestroy($canvas);
|
|
|
}
|
|
|
}
|
|
|
@@ -428,7 +438,6 @@ class UtilService
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* TODO 获取小程序二维码是否生成
|
|
|
* @param $url
|