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

Din uppgift Extra uppgift

2.6.2 Mer om bildmanipulering - ej obligatorisk

OBS! Denna del är inte obligatorisk att utföra. Jag kunde bara inte hålla mig från att visa lite av de möjligheter som php ger oss med bilder.

 

Oftast brukar man sätta in bilder med hälp av <img src="bildens.fil">, men ingenting hindrar att bilden skapas eller manipuleras av ett php program. Nedan finns ett exempel på vad som går att göra. Spara nedanstående kod som visabild.php. Du kan sedan skriva <din web adress>/visabild.php?bild=<en bild>.

Prova exemplen nedan (kontrollera properties för sidan/bilden - observera att det är en png bild du har fått - inte en jpeg):

Koden

Se mer i image *

<?php
# kontrollera om det fanns ?bild= i adressraden
# samt om gd-library är tillgängligt
if ( isset( $_REQUEST[ "bild" ] ) and checkExtension( "gd" ) )
{
    
# parametarn antas vara bildfilens namn
    
$filen = $_REQUEST[ "bild" ] ;
    
    
# kan man läsa in denna bild
    
if ( $image = @imagecreatefromjpeg ( $filen )  )
    {
    
        
# det gick att ladda bilden
        
        # skapa en copyright sträng
        
$sträng = "(c) anders, 2003";
        
        
# skapa en färg
        
$färg = imagecolorclosest( $image, 255, 255, 0 );
        
        
# tag den färg som pixeln längs ner till höger har
        # den skall bli ramfärg
        
$ramfärg = imagecolorat( $image,
                
imagesx( $image )-1,
                
imagesy( $image )-1 );
        
        
# tag den färg som första pixeln har
        # den skall bli transparent
        
$osynligfärg = imagecolorat( $image, 0, 0 );
        
        
# skriv in copyrighten
        
imagestring($image, 3, 10 , 9, $sträng, $färg);
        
        
# dra tre rektanglar med ramfärg
        
for( $i = 0; $i < 3; $i++ )
        {
            
imagerectangle ( $image,
                            
$i,
                            
$i,
                            
imagesx( $image ) - ( 1 * $i ),
                            
imagesy( $image ) - ( 1 * $i ),
                            
$ramfärg);
        }
        
        
# sätt den transparenta färgen
        
imagecolortransparent( $image,  $osynligfärg );
        
        
# sänd resultatet som png eftersom jpeg
        #inte har transparens
        
header("Content-type: image/png");
        
        
# sänd datat
        
imagepng($image);
        
        
# töm minnet från bilden
        
imagedestroy($image);

    }
    else
    {
        
# om inte så skapar vi en bild från scratch
        # felmeddelande
        
$fel = "ERROR!";
        
        
# skapa bilden - låt den vara 200*200 pixels
        
$image =  imagecreate(200,200);
        
        
# skapa två färger - en vit och en blå
        
$white = imagecolorallocate( $image, 255, 255, 255 );
        
$blue = imagecolorallocate( $image, 0, 0, 255 );
        
        
# fyll bilden med den blå färgen
        
imagefill( $image, 0, 0, $blue );
        
        
# beräkna mitten horisontellt - beakta textbredden
        
$px     = imagesx( $image ) / 2 - strlen( $fel ) * imagefontwidth( 3 ) / 2;
        
        
# beräkna mitten vertikalt - beakta texthöjden
        
$py     = imagesy( $image ) / 2  - imagefontheight( 3 ) / 2;
        
        
# skriv ut felmeddelandet i mitten av bilden
        
imagestring( $image, 3, $px, $py, $fel, $white );
        
        
# sätt rätt content-type för jpeg bilder
        
header("Content-type: image/jpeg");
        
        
# sänd bilden i jpeg format till browsern
        
imagejpeg( $image );
        
        
# färdig - förstör bilden igen
        
imagedestroy($image);
    }
}
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 2.6.2.2 - samples/visabild.php

Resultat av listning 2.6.2.2

   UppgifterUppgift 5Extra uppgift