使用php创建椭圆

时间:2015-03-20 08:51:38

标签: php image gd ellipse

我需要使用自定义颜色创建如下椭圆。

Custom image

我正在使用Intervention image库来实现这一目标。

我所做的是:
我为每个部分创建了6个不同的透明图像 并尝试创建一个画布,然后屏蔽其他图层,但结果不如预期。 我只能通过这个过程为图像的第一部分着色。

    Image::configure(array('driver' => 'gd'));
    $img = Image::canvas(150,104,'#000')->insert(WWW_ROOT.DS.IMAGES_URL.'test/masks/1.png');
    $img->mask(WWW_ROOT.DS.IMAGES_URL.'test/masks/2.png', true);
    $img->mask(WWW_ROOT.DS.IMAGES_URL.'test/masks/3.png', true);
    $img->mask(WWW_ROOT.DS.IMAGES_URL.'test/masks/4.png', true);
    $img->mask(WWW_ROOT.DS.IMAGES_URL.'test/masks/5.png', true);
    $img->mask(WWW_ROOT.DS.IMAGES_URL.'test/masks/6.png', true);
    $img->save(WWW_ROOT.DS.IMAGES_URL.'test/test.png');
    echo $img->response();

我需要帮助来创建上面的自定义颜色图像或任何其他选项来实现此目的。

3 个答案:

答案 0 :(得分:1)

不完美但更好:

<?php
     $image = imagecreatetruecolor(300, 300);


    $white    = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
    $gray     = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);
    $darkgray = imagecolorallocate($image, 0x90, 0x90, 0x90);
    $navy     = imagecolorallocate($image, 0x00, 0x00, 0x80);
    $darknavy = imagecolorallocate($image, 0x00, 0x00, 0x50);
    $red      = imagecolorallocate($image, 0xFF, 0x00, 0x00);
    $darkred  = imagecolorallocate($image, 0x90, 0x00, 0x00);
    $white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);


    for ($i = 60; $i > 50; $i--) {
       imagefilledarc($image, 150, $i, 300, 50, 0, 60, $darknavy, IMG_ARC_PIE);
       imagefilledarc($image, 150, $i, 300, 50, 60, 120 , $darkgray, IMG_ARC_PIE);
       imagefilledarc($image, 150, $i, 300, 50, 120, 180 , $darkred, IMG_ARC_PIE);

       imagefilledarc($image, 150, $i, 300, 50, 180, 240 , $navy, IMG_ARC_PIE);
       imagefilledarc($image, 150, $i, 300, 50, 240, 270 , $gray, IMG_ARC_PIE);
       imagefilledarc($image, 150, $i, 300, 50, 270, 360 , $red, IMG_ARC_PIE);



    }

    imagefilledarc($image, 150, 50, 300, 50, 0, 60, $navy, IMG_ARC_PIE);
    imagefilledarc($image, 150, 50, 300, 50, 60, 120 , $gray, IMG_ARC_PIE);
    imagefilledarc($image, 150, 50, 300, 50, 120, 180 , $red, IMG_ARC_PIE);

    imagefilledarc($image, 150, 50, 300, 50, 180, 240 , $navy, IMG_ARC_PIE);
    imagefilledarc($image, 150, 50, 300, 50, 240, 270 , $gray, IMG_ARC_PIE);
    imagefilledarc($image, 150, 50, 300, 50, 270, 360 , $red, IMG_ARC_PIE);

    imagefilledarc($image, 150, 50, 280, 40, 0, 360, $white, IMG_ARC_PIE);



    header('Content-type: image/png');
    imagepng($image);
    imagedestroy($image);
?>

答案 1 :(得分:0)

为什么不使用imageellipse(), imagefilledellipse()imagefilledarc()

<?php

    // Création de l'image
    $image = imagecreatetruecolor(100, 100);

    // Allocation de quelques couleurs
    $white    = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
    $gray     = imagecolorallocate($image, 0xC0, 0xC0, 0xC0);
    $darkgray = imagecolorallocate($image, 0x90, 0x90, 0x90);
    $navy     = imagecolorallocate($image, 0x00, 0x00, 0x80);
    $darknavy = imagecolorallocate($image, 0x00, 0x00, 0x50);
    $red      = imagecolorallocate($image, 0xFF, 0x00, 0x00);
    $darkred  = imagecolorallocate($image, 0x90, 0x00, 0x00);

    // Création de l'effet 3D
    for ($i = 60; $i > 50; $i--) {
       imagefilledarc($image, 50, $i, 100, 50, 0, 45, $darknavy, IMG_ARC_PIE);
       imagefilledarc($image, 50, $i, 100, 50, 45, 75 , $darkgray, IMG_ARC_PIE);
       imagefilledarc($image, 50, $i, 100, 50, 75, 360 , $darkred, IMG_ARC_PIE);
    }

    imagefilledarc($image, 50, 50, 100, 50, 0, 45, $navy, IMG_ARC_PIE);
    imagefilledarc($image, 50, 50, 100, 50, 45, 75 , $gray, IMG_ARC_PIE);
    imagefilledarc($image, 50, 50, 100, 50, 75, 360 , $red, IMG_ARC_PIE);


    // Affichage de l'image
    header('Content-type: image/png');
    imagepng($image);
    imagedestroy($image);
    ?> 

答案 2 :(得分:0)

最后,我能够达到预期的效果。

我所做的是:

使用此image通过此jQuery library获取每个区域的多边形坐标。

获取每个区域的坐标后,我使用polygon提供的Intervention Image Library函数创建了所需的图像。

感谢所有人的帮助,也许这可以帮助别人。