[ΛΥΘΗΚΕ] GD Library - Πρόβλημα με Rounded Edges

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

[ΛΥΘΗΚΕ] GD Library - Πρόβλημα με Rounded Edges

Δημοσίευση από burnmind » 13 Ιαν 2010 13:42

Καλησπέρα,

έχω γράψει ένα script χρησιμοποιώντας την GD Library για να δημιουργώ pie charts. H εικόνα που παράγεται είναι transparent png. Το πρόβλημά μου είναι πως η άκρη του κύκλου εμφανίζεται pixel-ιασμένη. Δε μπορώ να το εξηγήσω σωστά με λόγια οπότε δείτε το screenshot:

Εικόνα

Εμφανίζω την εικόνα που παράγω σε πραγματικό μέγεθος, οπότε δεν είναι πρόβλημα από resize. Γνωρίζει κανείς κάποια λύση;

Συνοπτικά, ένα μικρό κομάτι του κώδικα (για να δείξω τα functions που χρησιμοποιώ):

Κώδικας: Επιλογή όλων

//Δημιουργία του image
$im = imagecreate(400, 400);

//Το colour που θέτω ως transparent background
$transparent = imagecolorallocate($im, 255, 255, 255);
imagecolortransparent($im, $transparent);

//Δημιουργεί τα κομάτια που απαρτίζουν το pie chart
imagefilledarc($im, $center, $center, 270, 270, $start, $end, $somecolour, IMG_ARC_PIE);

imagepng($im,'image.png');
imagedestroy($im);
Τελευταία επεξεργασία από το μέλος burnmind την 13 Ιαν 2010 14:39, έχει επεξεργασθεί 1 φορά συνολικά.

nbc
Honorary Member
Δημοσιεύσεις: 526
Εγγραφή: 05 Σεπ 2009 20:12
Επικοινωνία:

[ΛΥΘΗΚΕ] GD Library - Πρόβλημα με Rounded Edges

Δημοσίευση από nbc » 13 Ιαν 2010 13:50

Αυτό που ζητάς, λέγεται anti-aliasing.

O ευκολότερος τρόπος για να το πετύχεις είναι να σχεδιάσεις το γραφικό σου (ισχύει για όλα τα γραφικά) στη διπλάσια ανάλυση από τη ζητούμενη (width*2, height*2) και πριν το παραδώσεις να το κάνεις resample (εντολή της GD) στην κανονική ανάλυση.

Αν το αποτέλεσμα δε σε ικανοποιεί, μπορεί να δοκιμάσεις με μεγαλύτερη ανάλυση (x3, κλπ).

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

[ΛΥΘΗΚΕ] GD Library - Πρόβλημα με Rounded Edges

Δημοσίευση από burnmind » 13 Ιαν 2010 14:37

Σ' ευχαριστώ πάρα πολύ για την άμεση απάντηση. Πολύ καλύτερο το αποτέλεσμα:

Εικόνα

Για όποιον ενδιαφέρεται, οι προσθήκες στον κώδικα ώστε να κρατάει το transparency του png, κάτι που δε γίνεται απλά με την imagecopyresampled():

Κώδικας: Επιλογή όλων

$im2 = imagecreatetruecolor(300, 300);

imagealphablending($im2, false);
imagesavealpha($im2,true);

$transparent2 = imagecolorallocatealpha($im2, 255, 255, 255, 127);
imagefilledrectangle($im2, 0, 0, 300, 300, $transparen2);

imagecopyresampled($im2, $im, 0, 0, 0, 0, 300, 300, 600, 600);

imagepng($im2,'image2.png');

imagedestroy($im);
imagedestroy($im2);

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης