使用透明度在PHP中创建圆形png图像并在其中居中

时间:2016-01-21 21:10:24

标签: php html png transparency avatar

我想为我的网站创建个人资料图片。图像应该是圆形的,纯色的背景颜色和正好在中心的单个大字母。

到目前为止,我已经能够创建一个方形png图像和一个字母但它没有居中。由于不同的字母宽度不同,我会得到一些偏离中心的字母。

我要实施" round"使用透明度在PHP中使用png图像。

这是完整的脚本,应该开箱即用。如果你想使用自定义字体,你需要Arial.tff,但并不是绝对需要它。

有一个包含某些颜色的查找表。单个字母得到哈希(是的,我知道这很愚蠢,但这样它更灵活,因为我可以传递任何我喜欢的字符串)并且选择了一种颜色。

<?php

$text = "a";

$posx = 40;
$posy = 150;
$size = 120;
$displaytext = strtoupper($text);

$image = imagecreatetruecolor(200, 200);

// pick a background at random
$binhash = md5($text, true);
$numhash = unpack('N2', $binhash);
$index = abs($numhash[1]) % 16;

$palette = array(
array(0xde,0x5a,0xa4),
array(0xae,0xc6,0xcf),
array(0x96,0x6f,0xd6),
array(0xff,0xb3,0x47),

array(0xff,0x69,0x61),
array(0x77,0xdd,0x77),
array(0x03,0xc0,0x3c),
array(0xcf,0xcf,0xc4),

array(0xc2,0x3b,0x22),
array(0xfd,0xfd,0x96),
array(0x83,0x69,0x53),
array(0x77,0x9e,0xcb),

array(0xb1,0x9c,0xd9),
array(0xb3,0x9e,0xb5),
array(0xf4,0x9a,0xc2),
array(0xff,0xd1,0xdc)
);

$r = $palette[$index][0];
$g = $palette[$index][1];
$b = $palette[$index][2];

$image = imageCreate(200, 200);
imageColorAllocate($image, $r, $g, $b);
$color = imageColorAllocate($image, 255, 255, 255);
$font = 'arial.ttf';



$box = imagettfbbox(200, 0, "ARIAL", $displaytext);
$width = abs($box[2] - $box[0]);
$height = abs($box[5] - $box[1]);

$image = imageCreate(200, 200);
imageColorAllocate($image, $r, $g, $b);
$color = imageColorAllocate($image, 255, 255, 255);
$font = 'arial.ttf';
imagettftext($image, 200, 0, 0 + (200/2 - floor($width/2)), 200, $color, "ARIAL", $displaytext);

header("content-type: image/png");
imagepng($image);
imagedestroy($image);
?>

如何修改此类代码以便:

  • 有圆角。我应该在中心创建一个透明背景和一个实心光盘吗?
  • 以字母为中心,无论是哪个字母

1 个答案:

答案 0 :(得分:1)

这可以帮助您集中信件

AttributeError: 'B' object has no attribute 'bx'

使用fontmetrics,您可以使用特定字体计算特定字母/文本的宽度和高度,并且可以访问这些属性。  希望能帮到你。