2010-03-14 208 views
4

我正在製作一個PHP圖像腳本,它將在給定半徑處創建圓圈。PHP:創建一個平滑的邊緣圓圈,圖像或字體?

我用:

<?php 
imagefilledellipse ($image, $cx, $cy, $w, $h, $color); 
?> 

卻討厭它產生粗糙的邊緣。所以我想製作或使用我會輸出使用圓字體:

<?php 
imagettftext ($image, $size, $angle, $x, $y, $color, 'fontfile.ttf', $text); 
?> 

這樣的字體將產生具有平滑邊緣的圓形。我的問題是使「字體大小」匹配「半徑大小」。

任何想法?或者也許一個能夠在圓上產生光滑邊緣的PHP類將會非常棒!

謝謝。

回答

2

聰明的想法,我喜歡那個!

但也許這PHP類已經做的伎倆:Antialiased filled Arcs/Ellipses for PHP (GD)

在許多情況下,網站需要動態創建的圖像:餅圖,圓潤的邊角,菜單按鈕等,這名單是無止境的。 PHP,或者更確切地說是GD庫,提供了橢圓弧和橢圓,但沒有反鋸齒。因此,我寫了一個PHP函數,用PHP輕鬆呈現填充的抗鋸齒橢圓弧或填充抗鋸齒橢圓(以及圓..)。繪製這些填充的弧線現在是一個單線。

+0

「創建圓角的PHP類(2.0版)」實際上是我需要的完美選擇。允許給出半徑,顏色,甚至是邊框。 – floatleft 2010-03-15 03:17:39

1

Cairo做好抗鋸齒。

+0

但並不能做到位圖輸出(糾正我,如果我錯了。) – 2010-03-14 23:55:15

+0

@Pekka:它可以做PNG和JPEG輸出(也許你正在尋找的字因爲是「光柵」?)。 – 2010-03-14 23:58:27

+0

你說得對,對不起。 http://www.php.net/manual/en/function.cairo-surface-write-to-png.php – 2010-03-14 23:59:46

6

- 平滑,使圖像兩倍所需的大小,然後下采樣到所需的大小。需要安裝/編譯到PHP

$circleSize=90; 
$canvasSize=100; 

$imageX2 = imagecreatetruecolor($canvasSize*2, $canvasSize*2); 

$bg = imagecolorallocate($imageX2, 255, 255, 255); 

$col_ellipse = imagecolorallocate($imageX2, 204, 0, 0); 

imagefilledellipse($imageX2, $canvasSize, $canvasSize, $circleSize*2, $circleSize*2, $col_ellipse); 

$imageOut = imagecreatetruecolor($canvasSize, $canvasSize); 
imagecopyresampled($imageOut, $imageX2, 0, 0, 0, 0, $canvasSize, $canvasSize, $canvasSize*2, $canvasSize*2); 

header("Content-type: image/png"); 
imagepng($imageOut);