IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[ImageMagick] imagefilledellipse : contours affreux


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Par défaut [ImageMagick] imagefilledellipse : contours affreux
    Bonjour,
    J'utilise la fonction imagefilledellipse dans une focntion php pour creer une image.
    Mais le resultat est tres crado !
    Quelqu'un sait comment faire un anti-aliasing ou truc pour rendre le resultat plus beau ?
    Merci.

  2. #2
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    En regardant un peu la doc, je trouve imageantialias

    As toi de voir si cela te convient ou pas

    M'enfin chercher dans la doc ne prends 1h et évite de poulluer le forum.

    Pierre

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Par défaut
    j'ai chercher dans la doc et antialias n'a eu aucun effet c'est pour ca que j'ai poster dans le forum.

  4. #4
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Alors je ne vois pas,


    Mais tu aurais du indiqué ce que tu avais essayé, cela aurait évité mon post un peu 'méchant'.

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    @FCYPBA : Merci de laisser la modération aux modérateurs

    @ouquoi : En quel format envoies-tu ton image ? Perso, j'ai eu quelques soucis de qualité d'image avec le GIF, tandis que le JPEG passe bien.

  6. #6
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Par défaut
    si tu pouvais nous montrer le resultat pour voir ce que tu trouves "crado" ^^
    Pour moi le jpeg et le png passent plutot bien.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Par défaut
    ca resemble a ca :


    Voila je trouve le cercle pas tres beau ...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Par défaut
    Vous trouvez ca beau vous le contour du cercle ?

  9. #9
    NoT
    NoT est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Par défaut
    Nah.

    Effectivement l'antialiasing a pas du passer, tu devrais poster ton code et préciser quelle version de GD tu utilises ?

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Ah, je vois mieux à quoi tu faisais référence ^^

    Une solution pourrait consister en la création d'une image plus grande et de la réduire. Je n'ai pas testé mais il n'y a pas de raison...

    [Edit] Tu as nien essayé avec imageantialias() ?

  11. #11
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Par défaut
    oui en effet c'est pas beau
    je pense que la solution de kirkis marche, si l'antiallias ne marche pas tu peux toujours te pencher dessus

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Par défaut
    Pas de meilleur resultat avec la fonction antialias voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    function print_png_with_color($icone,$color,$bgcolor)
    {
        $pixel_cadre = 40;
        $pixel_cercle = 20;
        $filename = ".\\images\\".$icone;
        $img = ImageCreateFromPng($filename);
        if($img == "")
        {
          echo "ERROR";
          return;
        }
     
        //Dimensions de l'image
        $imgWidth = imagesx($img) + $pixel_cadre;
        $imgHeight = imagesy($img)+ $pixel_cadre;
        $imgWidthCercle = imagesx($img) + $pixel_cercle;
        $imgHeightCercle = imagesy($img)+ $pixel_cercle;
     
        //Crée le thumb (image réduite)
        $imgComplete = ImageCreateTruecolor($imgWidth, $imgHeight);
     
        imageantialias( $imgComplete, True );
     
        $background = fromhex($bgcolor,$imgComplete);
     
        imagefill( $imgComplete, 0, 0,$background);
     
     
        $background = fromhex($bgcolor,$imgComplete);
     
        // couleur de remplissage de l'ellipse
        $col_ellipse = fromhex($color,$imgComplete);
     
        imagefilledellipse($imgComplete, $imgWidth/2, $imgHeight/2, $imgWidthCercle, $imgHeightCercle, $col_ellipse);
     
     
        $posx = $pixel_cadre / 2;
        ImageCopy($imgComplete,$img,$posx,$posx,0,0,$imgWidth-$pixel_cadre,$imgWidth-$pixel_cadre);
     
        // on affiche l'image
        header("Content-type: image/png");
        imagepng($imgComplete);
    }

  13. #13
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Par défaut
    tu fais l'antialias avant la creation de l'elipse, je pense qu'il faudrait le faire après

  14. #14
    NoT
    NoT est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Par défaut
    C'est ptet une connerie mais à mon avis l'antialiasing doit être placé plus loin dans ton code, je dirais meme juste avant de la renvoyer, quand tous les traitements ont été fait. ( juste avant ton image copy )

    Essai et dis nous

  15. #15
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Pour vérifier l'emplacement auquel il faut placer imageantialias, je découvre plein de chose sur cette fonction ( directive serait un terme plus approprié je pense)

    Pour ma part, je pense que l'endroit ou il faut la placer n'a pas d'importance

    par contre dans les notes de la fonctions, je découvre cette sympathique fonction utilisateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    The following function draws an AntiAliased (unfilled) Ellipse.
    It is used just liked the nomral ImageEllipse function.
    The optional parameter sets the number of segments...
     
    function ImageEllipseAA( &$img, $x, $y, $w, $h,$color,$segments=70)
    {
       $w=$w/2;
       $h=$h/2;
       $jump=2*M_PI/$segments;
       $oldx=$x+sin(-$jump)*$w;
       $oldy=$y+cos(-$jump)*$h;
       for($i=0;$i<2*(M_PI);$i+=$jump)
       {
           $newx=$x+sin($i)*$w;
           $newy=$y+cos($i)*$h;
           ImageLine($img,$newx,$newy,$oldx,$oldy,$color);
           $oldx=$newx;
           $oldy=$newy;
       }
    }
    A tester

    Pierre

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 6
    Par défaut Script antialias pour les cercles ou les elipses
    Bon la reponse tarde un peu, et c vrai que GD trace des cercles vraiment pas beau. Mais pour ceux qui passerai dans le coin, voici une fonction qui repond a ce forum.

    function imageSmoothCircle( &$img, $cx, $cy, $cr, $color ) {
    $ir = $cr;
    $ix = 0;
    $iy = $ir;
    $ig = 2 * $ir - 3;
    $idgr = -6;
    $idgd = 4 * $ir - 10;
    $fill = imageColorExactAlpha( $img, $color[ 'R' ], $color[ 'G' ], $color[ 'B' ], 0 );
    imageLine( $img, $cx + $cr - 1, $cy, $cx, $cy, $fill );
    imageLine( $img, $cx - $cr + 1, $cy, $cx - 1, $cy, $fill );
    imageLine( $img, $cx, $cy + $cr - 1, $cx, $cy + 1, $fill );
    imageLine( $img, $cx, $cy - $cr + 1, $cx, $cy - 1, $fill );
    $draw = imageColorExactAlpha( $img, $color[ 'R' ], $color[ 'G' ], $color[ 'B' ], 42 );
    imageSetPixel( $img, $cx + $cr, $cy, $draw );
    imageSetPixel( $img, $cx - $cr, $cy, $draw );
    imageSetPixel( $img, $cx, $cy + $cr, $draw );
    imageSetPixel( $img, $cx, $cy - $cr, $draw );
    while ( $ix <= $iy - 2 ) {
    if ( $ig < 0 ) {
    $ig += $idgd;
    $idgd -= 8;
    $iy--;
    } else {
    $ig += $idgr;
    $idgd -= 4;
    }
    $idgr -= 4;
    $ix++;
    imageLine( $img, $cx + $ix, $cy + $iy - 1, $cx + $ix, $cy + $ix, $fill );
    imageLine( $img, $cx + $ix, $cy - $iy + 1, $cx + $ix, $cy - $ix, $fill );
    imageLine( $img, $cx - $ix, $cy + $iy - 1, $cx - $ix, $cy + $ix, $fill );
    imageLine( $img, $cx - $ix, $cy - $iy + 1, $cx - $ix, $cy - $ix, $fill );
    imageLine( $img, $cx + $iy - 1, $cy + $ix, $cx + $ix, $cy + $ix, $fill );
    imageLine( $img, $cx + $iy - 1, $cy - $ix, $cx + $ix, $cy - $ix, $fill );
    imageLine( $img, $cx - $iy + 1, $cy + $ix, $cx - $ix, $cy + $ix, $fill );
    imageLine( $img, $cx - $iy + 1, $cy - $ix, $cx - $ix, $cy - $ix, $fill );
    $filled = 0;
    for ( $xx = $ix - 0.45; $xx < $ix + 0.5; $xx += 0.2 ) {
    for ( $yy = $iy - 0.45; $yy < $iy + 0.5; $yy += 0.2 ) {
    if ( sqrt( pow( $xx, 2 ) + pow( $yy, 2 ) ) < $cr ) $filled += 4;
    }
    }
    $draw = imageColorExactAlpha( $img, $color[ 'R' ], $color[ 'G' ], $color[ 'B' ], ( 100 - $filled ) );
    imageSetPixel( $img, $cx + $ix, $cy + $iy, $draw );
    imageSetPixel( $img, $cx + $ix, $cy - $iy, $draw );
    imageSetPixel( $img, $cx - $ix, $cy + $iy, $draw );
    imageSetPixel( $img, $cx - $ix, $cy - $iy, $draw );
    imageSetPixel( $img, $cx + $iy, $cy + $ix, $draw );
    imageSetPixel( $img, $cx + $iy, $cy - $ix, $draw );
    imageSetPixel( $img, $cx - $iy, $cy + $ix, $draw );
    imageSetPixel( $img, $cx - $iy, $cy - $ix, $draw );
    }
    }

    $img = imageCreateTrueColor( 320, 240 );

    imageSmoothCircle( $img, 160, 120, 100, array( 'R' => 0xCC, 'G' => 0x33, 'B' => 0x00 ) );
    imageSmoothCircle( $img, 170, 110, 75, array( 'R' => 0xDD, 'G' => 0x66, 'B' => 0x00 ) );
    imageSmoothCircle( $img, 180, 100, 50, array( 'R' => 0xEE, 'G' => 0x99, 'B' => 0x00 ) );
    imageSmoothCircle( $img, 190, 90, 25, array( 'R' => 0xFF, 'G' => 0xCC, 'B' => 0x00 ) );

    header( 'Content-Type: image/png' );
    imagePNG( $img );

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Par défaut
    Bon alors changer la position de l'antialias ne change rien.
    Quand a la fonction ImageEllipseAA ce n'est pas plus fin voir pire meme avec 200000 segment ...

  18. #18
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Par défaut
    Je pense que la solution qu'il te reste pour le moment c'est d'essayer de faire une image plus grande et d'en faire un thumb avec imagecopyresampled()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ImageMagick] Texte en Dégradé + Contours
    Par Marshall_Mathers dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 28/11/2007, 20h13
  2. Suivi de contours
    Par copper dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 23/04/2004, 12h57
  3. [Flash Mx] Problème de contour texte
    Par tahiti bob dans le forum Flash
    Réponses: 13
    Dernier message: 12/03/2004, 13h52
  4. Lissage de contours
    Par GoldenEye dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 12/02/2004, 12h40
  5. [Kylix] contour visible d'un TextRect?
    Par skoupay dans le forum EDI
    Réponses: 1
    Dernier message: 12/03/2003, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo