|
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
|