[PHP]"Watermerk"

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Leon-
  • Registratie: Juli 2005
  • Laatst online: 17-09 20:30
Ik heb het volgende script gemaakt (naja alleen het onderste gedeelte, dat php het script echot op een png image)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php 


if (!$server) { 
$server_ip = "85.92.130.86";   
$server_port = "12203"; 
} else { 
$server = explode(":", $server); 
$server_ip = $server[0]; 
$server_port = $server[1]; 
} 
// Do NOT change anything below this line! 

// Creating the URL for the connection: 

$server_ip = "udp://" . $server_ip; 

// Open the connection: 
$connect = fsockopen($server_ip, $server_port, $errno, $errstr, 30); 

// Set the timeout: 
socket_set_timeout ($connect, 1, 000000); 

// Get the information from the server, and put it into the $output array: 

$send = "ÿÿÿÿ" . chr (0x02) . "getstatus"; 
fputs($connect, $send); 
fwrite ($connect, $send); 
$output = fread ($connect, 1); 
if (! empty ($output)) { 
   do { 
     $status_pre = socket_get_status ($connect); 
     $output = $output . fread ($connect, 1); 
     $status_post = socket_get_status ($connect); 
   } while ($status_pre[unread_bytes] != $status_post[unread_bytes]); 
}; 

// Close the connection: 
fclose($connect); 

// Select the variables from the $output array: 
$output = explode ("\\", $output); 

$max_index = array_search ("sv_maxclients", $output); 
$max_clients = $output[$max_index+1]; 

$max_index = array_search ("mapname", $output); 
$mapname = $output[$max_index+1]; 

$max_index = array_search ("sv_hostname", $output); 
$hostname = $output[$max_index+1]; 

$max_index = array_search ("g_gametypestring", $output); 
$gametype = $output[$max_index+1]; 

$last_value = count($output) - 1; 
$players_string = $output[$last_value]; 
$players_string = explode("\"", $players_string); 

$get_first_ping = explode("\n", $players_string[0]); 
$players_string[0] = $get_first_ping[1]; 

$i = 1; 
$players = 0; 
while (count($players_string) != $i) { 
$i++; 
$i++; 
$players++; 
} 

// Create the image url: 
if (substr($mapname, 0, 3) == "dm/") { 
$picture_src = str_replace("dm/", "", $mapname); 
} else { 
$picture_src = str_replace("obj/", "", $mapname); 
} 
$picture_src = "images/" . $picture_src . ".jpg"; 


        
        
        
            
         
       
      
    



$img = imagecreate(450,400);
$bg = imagecolorallocate($img,255,255,255);
        
$str = ''.$hostname.'\n\nGame Type: '.$gametype.'\nPlayers: '.$players.'/'.$max_clients.'\n\nMap: '.$mapname.'';

foreach(explode('\n',$str) as $num => $line) {
imagestring($img,5,10,(($num+1)*15),trim($line),imagecolorallocate($img,0,0,0));
}
header("Content-Type: image/png");
imagepng($img);
imagedestroy($img);

 
    ?>


Dat geeft het volgende resultaat:

Afbeeldingslocatie: http://img232.imageshack.us/img232/8950/server1ob.th.png

Wat ik nu ook nog graag wou hebben is, dat onder de map naam (obj/obj_team1) een image van de map verschijnt, dus ik zat te denken aan een soort watermerk die je op dit png bestand zet.
imagecreatefrompng en imagecopy, helaas krijg ik dan een fout dat server.php geen png bestand is (server.php is de pagina waar het bovenstaande script instaat)

Heeft iemand een tip of een oplossing voor mijn probleem? (zo heeeeel goed ben ik ook niet in php ;( )

[ Voor 14% gewijzigd door Leon- op 28-06-2006 12:36 ]


Acties:
  • 0 Henk 'm!

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 20-09 19:18
server.php?onzin=.png

Als je hem zo aanroept dan moet het toch wel werken?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

server.php is inderdaad geen png bestand. Het is immers een php script wat uiteindelijk een plaatje naar de client stuurt. Als je daadwerkelijk deze omweg wilt nemen zul je ervoor moeten zorgen dat het script door de webserver uitgevoerd wordt en dit dus inladen via http. Dit is echter een ontiegelijke omweg. Het bovenstaande script heeft immers halverwege de data van het plaatje waar je gewoon je watermark overheen kunt leggen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

met imagecreatefromjpg kan je een jpg inladen in een image idenifier. deze kan je dan met imagecopymerge() samenvoegen!

Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 10:10

WormLord

Devver

Als je op regel 91 nou eens de volgende code zet:
PHP:
1
$img = imagecreatefrompng("watermerk.png");

En dan zorgt dat "watermerk.png" een png van 450x400 groot is, dan ben je volgens mij al een heel eind.