TagWall
Laat een tekst op een plaatje achter. Alles is random :)
Ik denk dat alles wel voor zich spreekt.
Let wel op dat de map waarin je index.php zet schrijfbaar moet zijn, en dat er fonts (lettertypen) beschikbaar zijn.
Niet alle servers ondersteunen imagettftext(). Voor de ongelukkigen weet ik geen oplossing, helaas.
Voor diegenen die een leuker muurtje willen hebben, ik heb hier een open dir met een paar plaatjes van Stock.Xchng. Alleen voor niet-commercieel gebruik, rechten gaan naar de rechthebbenden. Even de plaatjes verkleinen voor gebruik is erg aangeraden :)
edit: code cleanup en dat idee van Legolas erin gezet.
edit2: voorbeeld doet het weer.
Voorbeeld: http://phphulp.ikhoefgeen.nl/tagwall/index.php
Gesponsorde koppelingen
PHP script bestanden
73 reacties op 'TagWall'
Gesponsorde koppelingen
Voor muur plaatje: http://phphulp.ikhoefgeen.nl/tagwall/muur.jpg
Hij wist een plaatje nu trouwens iedere dag, en zet hem in het archief
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
list($llx, $lly, $lrx, $lry, $urx, $ury, $ulx, $uly) = imagettfbbox($greatness, $drunkness, $style, $text);
$mostfarx = max(array($llx, $lrx, $urx, $ulx));
$mostfary = max(array($lly, $lry, $ury, $uly));
$mostnearx = min(array($llx, $lrx, $urx, $ulx));
$mostneary = min(array($lly, $lry, $ury, $uly));
if ($mostfarx > $width || $mostfary > $height) {
return false;
}
$minx = 0;
$miny = 0;
if ($mostnearx < 0) {
$minx += abs($mostnearx);
}
if ($mostneary < 0) {
$miny += abs($mostneary);
}
$maxx = $width - $mostfarx;
$maxy = $height - $mostfary;
if ($maxx < $minx || $maxy < $miny) {
return false;
}
$left = rand($minx, $maxx);
$top = rand($miny, $maxy);
?>
over de return false's: ik heb er een functie van gemaakt :P
BTW, Hoe kan je ervoor zorgen dat het plaatje altijd opnieuw gedownload wordt, dus gerefresht wordt?
Gelijk achter de code:
if(isset($_GET['text'])){
if(printTag(buildAWall(), $_GET['text'])){
echo 'Je hebt succesvol mijn muur beklad, de afbeelding wordt in 1 seconde vernieuwd';
//refresh pagina in 1 seconde
header("Refresh: 1; URL=/tagwall");
//eind refresh pagina in 1 seconde
Warning: opendir(./fonts/): failed to open dir: No such file or directory /domein.nl/public_html/login/tekenmuur/index.php on line 13
Fatal error: printTag: kon geen goede $style krijgen via getRandomFont() in domains/domein.nl/public_html/login/tekenmuur/index.php on line 90
Wat die ik nog fout?
<input type="text" name="text"/>
<input type="submit"/>
dit staat na submit in de browser http://www.wateenwebsite.nl?text=die ingevoerd is. Maar er zou iets moeten staan van http://www.wateenwebsite.nl?actie=tagwall
Ik gebruik gewoon het bovenstaande script. Snap niet waar het fout gaat.
Als je de pagina in de site zelf opent en een tekst ingeeft dan werkt het niet en kom je op de index pagina uit http://www.wines4all.nl/?actie=tagwall
Gezien het onderwerp van de site zou het leuk zijn deze gimmick aan de praat te krijgen (of heeft iemand een nog beter scriptje...).
Ik heb het scrip op de pagina geinclude.
Overigens is nu de wall iets te groot. Deze moet ik nog zien te verkleinen. Maar dan moet het eerst werken.
Dit in plaats van de huidige methode van het opslaan van de afbeelding met teksten en daar een nieuwe tekst overheen plakken.
Dit omdat je op de huidige manier geen teksten kunt verwijderen wanneer er dingen komen te staan die niet de bedoeling zijn.
Zou leuk zijn als ik het nu nog in de site zelf aan de praat krijg. Voor de volledigheid hieronder het hele scriptje dan nog maar een keer?
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
error_reporting(E_ALL);
define('CURRENT_WALL', './afbeeldingen/tagwall/walloftoday.jpg');
define('CLEAN_WALL', './afbeeldingen/tagwall/muur.jpg');
define('FONT_DIRECTORY', './fonts/');
define('QUALITY', 85);
function getRandomFont($font_directory){
$fonts = array();
$font_of_today = false;
if($dir_handle = opendir($font_directory)){
while (false !== ($font = readdir())) {
$extention = end(explode('.', $font));
if(strToLower($extention) == 'ttf'){
$fonts[] = $font;
}
}
}
if(count($fonts) > 0){
$font_of_today = $font_directory.$fonts[rand(0, count($fonts)-1)];
}
return $font_of_today;
}
function buildAWall(){
$wall = false;
if(file_exists(CURRENT_WALL)){
$wall = imagecreatefromjpeg(CURRENT_WALL);
}else{
$wall = imagecreatefromjpeg(CLEAN_WALL);
}
return $wall;
}
function printTag($wall, $text){
if(!empty($text) && $wall && $style = getRandomFont(FONT_DIRECTORY)){
list($width, $height) = getimagesize(CLEAN_WALL);
$paint = imagecolorallocate($wall, rand(0,255), rand(0,255), rand(0,255));
$drunkness = rand(-90, 90);
$greatness = rand(15, 35);
/* dankje Legolas */
list($llx, $lly, $lrx, $lry, $urx, $ury, $ulx, $uly) = imagettfbbox($greatness, $drunkness, $style, $_GET['text']);
$mostfarx = max(array($llx, $lrx, $urx, $ulx));
$mostfary = max(array($lly, $lry, $ury, $uly));
$mostnearx = min(array($llx, $lrx, $urx, $ulx));
$mostneary = min(array($lly, $lry, $ury, $uly));
$minx = 0;
$miny = 0;
if ($mostnearx < 0) {
$minx += abs($mostnearx);
}
if ($mostneary < 0) {
$miny += abs($mostneary);
}
$maxx = $width - $mostfarx;
$maxy = $height - $mostfary;
$left = rand($minx, $maxx);
$top = rand($miny, $maxy);
/* omdat je altijd wel foutjes tegenkomt */
header('X-Font-Type:'.$style);
header('X-X-coordinate:'.$top);
header('X-Y-coordinate:'.$left);
header('X-Font-Size:'.$greatness);
header('X-Font_Angle:'.$drunkness);
imagettftext($wall, $greatness, $drunkness, $left, $top, $paint, $style, $_GET['text']);
imagejpeg($wall, CURRENT_WALL, QUALITY);
imagedestroy($wall);
return true;
}else{
if(empty($text)){
trigger_error('printTag: $text (2e parameter) is lees', E_USER_ERROR);
}
elseif(!$wall){
trigger_error('printTag: $wall (1e parameter) is niet geldig', E_USER_ERROR);
}
elseif(!$style){
trigger_error('printTag: kon geen goede $style krijgen via getRandomFont()', E_USER_ERROR);
}
return false;
}
}
if(isset($_GET['text'])){
if(printTag(buildAWall(), $_GET['text'])){
echo 'Je hebt succesvol mijn muur beklad'
;
}else{
echo 'De muur is dicht voor renovatie';
}
}
/* optioneel: leegt iedere dag de muur, en hernoemt hem naar de tijd */
if(filectime(CURRENT_WALL) < strtotime('-1 day')){
rename(CURRENT_WALL, time().'.jpg');
copy(CLEAN_WALL, CURRENT_WALL);
}
?>
<?echo "<form method=\"get\" action=\"?actie=tagwall\">";?>
<input type="text" name="text"/>
<input type="submit"/>
<?echo "</form>";?>
<img src="<?php echo CURRENT_WALL."?".time() ;?>" title="Dit is de Grafitty van onze bezoekers van vandaag!" alt="tagwall" />
Verder is een echo niet nodig als je alleen maar wat basis tekst neerzet.
2
3
4
<input type="text" name="text"/>
<input type="submit"/>
<?echo "</form>";?>
Dat moet worden:
<input type="hidden" name="actie" value="tagwall">
<input type="text" name="text"/>
<input type="submit"/>
</form>
Tevens krijg ik de melding:
Fatal error: printTag: $text (2e parameter) is lees in tags.php on line 85
Door een value in text te zetten is dat een beetje weggepoetst.
2
3
4
5
<input type="hidden" name="actie" value="tagwall">
<input type="text" name="text" value="..."/>
<input type="submit"/>
</form>
Kan beter denk ik maar wat en hoe?
dit is het scriptje:
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
ob_start();
//error_reporting(E_ALL);
?>
<?php
// toegestane pagina's in een array zetten
$toegestaan=array("home_nl","home_uk","home","index","tags","tagwall","menu2","menu","menu_nl","menu_uk","contact_nl","olieverf","tentoonstelling","opdrachten","graffity","paintbrush","oud_werk","oud_graffity","oud_olieverf");
// controleren of er een pagina is meegegeven)
if(isset($_GET['actie']))
{
// de binnengehaalde variabele omzetten naar kleine letters
$actie = strtolower($_GET['actie']);
// controleren of de pagina voorkomt in de array
if (in_array($actie, $toegestaan))
{
// wanneer die toegestaan is includen
include($actie.".php");
}else{
// wanneer die niet toegestaan is standaard pagina includen.
include("home_nl.php");
}
}else{
include("home_nl.php");
}
?>
Iemand een idee om dit toch werkzaam te krijgen? zou namelijk voor de betreffende site wel erg leuk zijn, zie hier: www.de-wieger.nl
Bedankt
Om te reageren heb je een account nodig en je moet ingelogd zijn.
- Details
Door:
Jelmer rrrr- 8 jaar geleden
- 431.681 x bekeken
- Labels
- Geen tags toegevoegd.
- PHP scripts opties
- Image manipulation
- Nieuwste PHP scripts
- PHP script toevoegen


PHP hulp
0 seconden vanaf nu