image-to-html
image_to_html.php
Code (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
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
<?php
function image_to_html($source_img, $text = '#', $text_size = 10, $max_ex_time = 0)
{
ini_set('max_execution_time', $max_ex_time);
//Vervangen van de spaties die verpesten de 'layout'
$text = str_replace(' ', '_', $text);
switch(strtolower(get_extension($source_img)))
{
case'jpg':
{
$img = imagecreatefromjpeg($source_img);
break;
}
case'png':
{
$img = imagecreatefrompng($source_img);
break;
}
case'gif':
{
$img = imagecreatefromgif($source_img);
break;
}
}
//Stop het script als er een error is.
if (!$img)
{
exit;
}
//Krijg een array met elke letter van de tekst er in
$text = preg_split('//', $text, -1, PREG_SPLIT_NO_EMPTY);
//Deze gaan we nodig hebben omdat we zodalijk door de
//array van hierboven heen gaan om steeds de volgende letter te nemen.
$text_lenght = count($text) -1;
$i = 0;
$last_colour = '';
$current_colour = '';
$img_width = imagesx($img);
$img_hight = imagesy($img);
ob_start();
//Nog even snel de style er voor gooien
echo"<style>
font {
line-height: 0.7;
font-size: ".$text_size."px;
}
</style>";
//Loop'en door het plaatje heen
for ($cy=0; $cy < $img_hight; $cy++)
{
for ($cx=0; $cx < $img_width; $cx++)
{
$rgb = imagecolorat($img, $cx, $cy);
$colour = imagecolorsforindex($img, $rgb);
$last_colour = $current_colour;
$current_colour = sprintf('%02x%02x%02x', $colour['red'], $colour['green'], $colour['blue']);
//We kijken of de laatste kleur gelijk is aan de vorige dan hoeven we
//niet helemaal de font tag er weer omheen te zetten
if ($last_colour == $current_colour)
{
//ze zijn het zelfde we kunnen gewoon de tekst echo'en
echo $text[$i];
}
else
{
echo '</font><font style="color:#'.$current_colour.'">'.$text[$i];
}
//als we aan het einde zitten van ons word of zin beginnen we opnieuw.
$i = ($i == $text_lenght) ? 0 : $i + 1; //Iemand enig idee waarom $i++ hier niet werkt?
}
echo "\n";
}
$_txt_img = ob_get_clean();
return $_txt_img;
}
function get_extension($file)
{
if (strpos($file, '.') === false)
{
return false;
}
$file = explode('.', $file);
return array_pop($file);
}
?>
function image_to_html($source_img, $text = '#', $text_size = 10, $max_ex_time = 0)
{
ini_set('max_execution_time', $max_ex_time);
//Vervangen van de spaties die verpesten de 'layout'
$text = str_replace(' ', '_', $text);
switch(strtolower(get_extension($source_img)))
{
case'jpg':
{
$img = imagecreatefromjpeg($source_img);
break;
}
case'png':
{
$img = imagecreatefrompng($source_img);
break;
}
case'gif':
{
$img = imagecreatefromgif($source_img);
break;
}
}
//Stop het script als er een error is.
if (!$img)
{
exit;
}
//Krijg een array met elke letter van de tekst er in
$text = preg_split('//', $text, -1, PREG_SPLIT_NO_EMPTY);
//Deze gaan we nodig hebben omdat we zodalijk door de
//array van hierboven heen gaan om steeds de volgende letter te nemen.
$text_lenght = count($text) -1;
$i = 0;
$last_colour = '';
$current_colour = '';
$img_width = imagesx($img);
$img_hight = imagesy($img);
ob_start();
//Nog even snel de style er voor gooien
echo"<style>
font {
line-height: 0.7;
font-size: ".$text_size."px;
}
</style>";
//Loop'en door het plaatje heen
for ($cy=0; $cy < $img_hight; $cy++)
{
for ($cx=0; $cx < $img_width; $cx++)
{
$rgb = imagecolorat($img, $cx, $cy);
$colour = imagecolorsforindex($img, $rgb);
$last_colour = $current_colour;
$current_colour = sprintf('%02x%02x%02x', $colour['red'], $colour['green'], $colour['blue']);
//We kijken of de laatste kleur gelijk is aan de vorige dan hoeven we
//niet helemaal de font tag er weer omheen te zetten
if ($last_colour == $current_colour)
{
//ze zijn het zelfde we kunnen gewoon de tekst echo'en
echo $text[$i];
}
else
{
echo '</font><font style="color:#'.$current_colour.'">'.$text[$i];
}
//als we aan het einde zitten van ons word of zin beginnen we opnieuw.
$i = ($i == $text_lenght) ? 0 : $i + 1; //Iemand enig idee waarom $i++ hier niet werkt?
}
echo "\n";
}
$_txt_img = ob_get_clean();
return $_txt_img;
}
function get_extension($file)
{
if (strpos($file, '.') === false)
{
return false;
}
$file = explode('.', $file);
return array_pop($file);
}
?>
voorbeeld.php