|
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");
}
}
}
?>
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
|