Gömb rajzolása PHP-ben

Gömb logó

Ez a script már régen készült, és közel sem tökéletes megoldásokkal. De mivel újra írni már nincs kedvem, ezért így mutatom meg :)

A bal felső sarokban levő képhez hasonló gömböt, illetve különböző variációit lehet generálni. Minden fontos tulajdonsága beállítható url-ből. Így tesztelhetők a lehetőségek.


Tulajdonságok:

  • Színek:
    Minden szín a következő formában adható meg: RRR,GGG,BBB
    Ahol az egyes betűk az RGB-nek megfelelően a vörös, zöld és kék színek mértékét jelentik 0 és 255 között.

    • fill: Gömb színe (kitöltése)
    • bgcolor: Kép háttere, ha jpeg formátumú
    • border: Választható szegély az alakzatnak
    • monox,monoy: Nevüknek megfelelően vízszintes és függőleges irányban húzott ívek színe. Alapértelmezetten minden ív más színű.
    • _0 -től _7-ig: Az ívek színkészlete változó színek esetén
  • Méretek:

    • space: Az ívek távolsága egymástól pixelben.
    • width: A kép szélessége (Alapértelmezetten azonos a rajz szélességével)
    • height: A kép magassága (Alapértelmezetten azonos a rajz magasságávall)
    • w: A rajz szélessége
    • h: A rajz magassága

  • type: Kép típusa. (jpeg,jpg,png és gif a megengedett)
  • quality: A kép minősége 0 és 100 között. (Csak jpeg formátum esetén)

Minta képek:

  • url: gomb.php

    1. minta

  • url: gomb.php?fill=255,255,0&monox=0,0,0&monoy=255,255,255

    2. minta

  • url: gomb.php?height=200&h=200&fill=255,0,0&monox=0,0,0&monoy=255,255,255

    3. minta

  • url: gomb.php?height=140&h=140&monox=0,0,0&monoy=0,0,0&space=5

    4. minta

  • gomb.php?type=jpeg&height=140&h=140&monox=0,0,0&monoy=0,0,0&space=5

    5. minta

Forráskód:

<?php
//színek beállítása
$colors['fill']    = '140,100,255';
$colors['bgcolor'] = '000,000,001';
$colors['border']   = '000,000,000';

$colors['_0'] = '000,000,000';
$colors['_1'] = '000,000,255';
$colors['_2'] = '000,255,000';
$colors['_3'] = '000,255,255';
$colors['_4'] = '255,000,000';
$colors['_5'] = '255,000,255';
$colors['_6'] = '255,255,000';
$colors['_7'] = '255,255,255';

$colors['monox'] = '000,000,000';
$colors['monoy'] = '000,000,000';

//Méretek, és kép típus
$space          = 10;
$type           = 'gif';
$width          = 400;
$height         = 400;
$quality        = 100;

$space          = (isset($_GET['space']))       ? abs((int)$_GET['space'])      : $space;
$type           = (isset($_GET['type']))        ? $_GET['type']         : $type;
$width          = (isset($_GET['width']))       ? $_GET['width']        : $width;
$height         = (isset($_GET['height']))      ? $_GET['height']       : $height;
$quality        = (isset($_GET['quality']))     ? $_GET['quality']      : $quality;

class Gomb
{
    var $type;
    var $source;
    var $width;
    var $height;

    var $colors = array();

    //Kép elõkészítése
    function Gomb($type,$width,$height)
    {
                if (!in_array(strtolower($type),array('jpeg','jpg','png','gif')))
                {
                        $type = 'gif';
                }
        header("Content-type: image/$type");
        $this->type   = $type;
        $this->width  = $width;
        $this->height = $height;
        $this->source = imageCreate($width,$height);
    }
   
    //színek megadása
    function set_colors($colors)
    {
        foreach($colors as $key => $value)
        {
            global $$key;
            if(isset($_GET[$key])){ $value = $_GET[$key];}
            $rgb = explode(',',$value);
            $$key = imageColorAllocate($this->source,$rgb[0],$rgb[1],$rgb[2]);
            $this->colors[$key] = $$key;
        }
    }
   
    //kép kirajzolása
    function print_image($quality)
    {
        $func = 'image'.$this->type;
        if(strtolower($this->type) != 'gif' and strtolower($this->type) != 'png')
        {
            $func($this->source,null,$quality);
        }else{
            $func($this->source);
        }
    }

        //Rajz összeállítása
    function rajz($w,$h,$space,$colors = array())
    {
        $j = 4;
        $i=round($space/2);
        while($i<=$w){
        if($j < 7){$j++;}else{$j=0;}
        $colorX = (isset($_GET['monox'])) ? $colors['monox'] : $colors['_'.$j];
        ImageArc(
            $this->source,
            round($this->width/2),
            round($this->height/2),
            $i,
            $h,
            0,
            360,
            $colorX
            );
        $i+=$space;
        }
        $j = 4;
        $i=round($space/2);
        while($i<=$h){
        if($j < 7){$j++;}else{$j=0;}
        $colorY = (isset($_GET['monoy'])) ? $colors['monoy'] : $colors['_'.$j];
        ImageArc(
            $this->source,
            round($this->width/2),
            round($this->height/2),
            $w,
            $i,
            0,
            360,
            $colorY
            );
        $i+=$space;
        }
        if(isset($_GET['border'])){
                        ImageArc($this->source,round($this->width/2),round($this->height/2),
                    $w,$h,0,360,$colors['border']);
                }
        imageFill($this->source,10,10,$colors['bgcolor']);
        imageFill($this->source,10,$this->height-10,$colors['bgcolor']);
        imageFill($this->source,$this->width-10,10,$colors['bgcolor']);
        imageFill($this->source,$this->width-10,$this->height-10,$colors['bgcolor']);
        ImageColorTransparent($this->source,$colors['bgcolor']);
    }
}

$img = new Gomb($type,$width,$height);
$img->set_colors($colors);
$w = (isset($_GET['w'])) ? $_GET['w'] : $img->width;
$h = (isset($_GET['h'])) ? $_GET['h'] : $img->height;
imagefill($img->source,1,1,$fill);

$img->rajz($w,$h,$space,$img->colors);

$img->print_image($quality);
?>

Kategóriák: 
Megosztás/Mentés