några sidor på nätet om PHP programmering

Sök efter  
Börja här Uppgifter Testa dig själv Tips Sidokarta mm. Länkar Sök

4.3 Bilder

Man kan skapa bilder helt programmässingt i PHP. Detta förutsätter att gd extensionen är tillgänglig, antingen statiskt eller dynamiskt. Nedan är ett litet programexempel på en knappkonstruerare i PHP. Se mera i PHP-dokumentationen i image *

<?php

    
# har du inte PHP 4.1.0 eller nyare måste du byta ut
    # $_REQUEST till $HTTP_GET_VARS
    # och $_SERVER till $HTTP_SERVER_VARS
    # för att få koden att fungera
    # du bör även ha tillgång till gd extensionen till PHP
    
    # kolla om gd extensionen finns tillgänglig
    # egendefinierad funktion längre ner i koden    
    
if ( checkExtension( "gd" ) )
    {
        
# kom det bredd i url ?
        # om inte sätt 100
        
$width = isSet( $_REQUEST[ "width" ] ) ? $_REQUEST[ "width" ] : 100;
        
        
# typ av bild - default jpeg
        # png och wbmp tillåtna
        
$type = isSet( $_REQUEST[ "type" ] ) ? $_REQUEST[ "type" ] : "jpeg";

        
# höjden - default 30
        
$height = isset( $_REQUEST[ "height" ] ) ? $_REQUEST[ "height" ] : 30;

        
# texten - default "Knapp"
        
$label = isSet( $_REQUEST[ "label" ] ) ? $_REQUEST[ "label" ] : "Knapp";
        
        
# typsnitt siffra 0 - 5 - default 5
        
$font = isSet( $_REQUEST[ "font" ] ) ? $_REQUEST[ "font" ] : 5;
        
        
# man skulle även kunna ta färgkoderna från URL

        # skapa bilden med bredd o. höjd
        
$image = imageCreate( $width, $height );

        
# bakgrundfärg
        # har äntligen börjat lära mig Hexkoderna så jag använder
        # helst dem. Egendefinierad funktion
        
$bgcolor  = htmlColor( $image, "#1E90FF" );
                
        
# högdager färg
        
$lightcolor = htmlColor( $image, "#00BFFF" );
        
        
# skuggfärg
        
$darkcolor = htmlColor( $image, "#000080" );

        
# textfärg
        
$textcolor = htmlcolor( $image, "#FFFFFF" );
        
        
# fyll bakgrundfärgen
        # prametrar:
        # bilden, x , y, bredd, höjd, färg
        
imageFilledRectangle( $image, 1, 1, $width - 2, $height - 2, $bgcolor );
        
        
# rita övre strecket
        
imageLine( $image, 0, 0, $width - 1, 0, $lightcolor );

        
# rita vänstra strecket
        
imageLine( $image, 0, 0, 0, $height, $lightcolor );

        
# rita nedre skuggan
        
imageLine( $image, 0, $height - 1, $width - 1, $height - 1, $darkcolor );

        
# rita högra skuggan
        
imageLine( $image, $width - 1, 1, $width - 1, $height - 1, $darkcolor );

        
# räkna ut bredden på texten
        
$labelwidth  = imagefontwidth( $font ) * strlen( $label );

        
# räkna ut höjden på texten
        
$labelheight = imagefontheight( $font );

        
# kalkylera x och y för texten
        
$labely = ( $height - $labelheight ) / 2;
        
$labelx = ( $width - $labelwidth ) / 2;
        
        
# rita skuggan först
        # lite neråt och till höger
        
imageString( $image, $font, $labelx + 1, $labely + 1, $label, $darkcolor );

        
# och sedan texten
        
imageString( $image, $font, $labelx, $labely, $label, $textcolor );
        
        
# har användaren en MAc så kan vi ändra på färgerna lite
        # för att få rätt färger
        
if ( strpos( strtolower( $_SERVER["HTTP_USER_AGENT"] ), "mac" ) )
        {
            @
imageGammaCorrect($image, 2.2, 1.571 );
        }
        
        if (
$type == "png" )
        {
            
header("Content-type: image/x-png" );
            
imagePng( $image );
        }
        elseif (
$type == "wbmp" )
        {
            
header("Content-type: image/vnd.wap.wbmp" );
            
imageWbmp( $image );
        }
        else
        {
            
header("Content-type: image/jpeg" );
            
imageJpeg( $image );
        }
    }


    
    function
htmlColor( $image, $color )
    {
        
# plockar ut de enskilda färgerna med en regexp
        
$color_regexp = "/^#?(\w{2})(\w{2})(\w{2})$/";

        if (
preg_match( $color_regexp, $color, $rgb )
                        &&  
                        
count( $rgb ) == 4 )
        {
            
# syntax:
            # imagecolorallocate ( bild, röd, grön, blå )
            # returnerar en integer för färg
            
return imageColorAllocate( $image,
                                        
hexDec( $rgb[ 1 ] ),
                                        
hexDec( $rgb[ 2 ] ),
                                        
hexDec( $rgb[ 3 ] ) );
        }
        else
        {
            return
0; # svart
        
}

    }
    
# funktion som kontrollerar om en extension finns
    # Finns den inte försöker vi ladda den dynamiskt
    # all bidbearbetning förutsätter "gd" extensions som i
    # Windows finns i "php_gd.dll" filen
    # se till att "extension_dir" är korrekt i
    # php.ini filen
    
function checkExtension( $extension )
    {
        
$all = get_loaded_extensions();
        if (
in_array( $extension, $all ) )
        {
            return
true; # fanns
        
}
        else
        {
            if (
strtoupper( substr( PHP_OS, 0, 3 ) == "WIN" ) )
            {
                return
dl("php_" . $extension . ".dll");
            }
            else
            {
                
# jag tror detta kan funka men jag har inte
                # tillgång till en Linux server med några
                # extensions
                
return dl( "mod_" . $extension . ".so");
            }
        }
    }
?>
Listning 4.3.1 - samples/s95.php
[Visa i separat fönster]

Användning av koden

<img src="./samples/s95.php"><br>
<img
src="./samples/s95.php?width=140&label=Anders&font=2"
><br>
<img src="./samples/s95.php?label=Knäppa"><br>
<img src="./samples/s95.php?label=Knappar&type=png"><br>
<img src="./samples/s95.php?label=Knappar&font=3"><br>
Listning 4.3.2 - samples/s96.php






Resultat av listning 4.3.2

   TipsBilder