[script review] CLASS: Watermerk (Zoals 1001 anderen)
[File: image.inc.php][UPDATE]
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
<?php
/***********************************************************
* Een Class om een watermerk op een afbeelding te plaatsen *
***********************************************************/
class img {
// Construct => Benodigheden om de class te starten
function __construct($pathtoimage = NULL, $pathtowatermark = NULL, $watermarkalign = 'left', $watermarkvalign = 'top', $watermarktransparent = '100'){
// Afbeelding
img::image($pathtoimage);
// Watermerk
img::watermark($pathtowatermark);
// Positie van het watermerk
img::align($watermarkalign);
img::valign($watermarkvalign);
// Doorzichtigheid van het watermerk
img::transparent($watermarktransparent);
}
// Controleer de afbeelding
function image($pathtoimage = NULL){
$this->pathtoimage = $pathtoimage;
img::checkErrors();
}
// Controleer het watermerk
function watermark($pathtowatermark = NULL){
$this->pathtowatermark = $pathtowatermark;
img::checkErrors();
}
// Posititie van het watermerk (Links => Midden => Rechts => Getal [Links -> Rechts])
function align($watermarkalign = 'left'){
$this->align = $watermarkalign;
img::checkErrors();
}
// Posititie van het watermerk (Boven => Midden => Onder => Getal [Boven -> Onder])
function valign($watermarkvalign = 'top'){
$this->valign = $watermarkvalign;
img::checkErrors();
}
// Doorzichtigheid van het watermerk
function transparent($watermarktransparent = '100'){
$this->transparent = $watermarktransparent;
img::checkErrors();
}
// Controleer op fouten
private function checkErrors(){
// Standaard waarden
$this->error['total_errors'] = '0';
$this->error['image'] = NULL;
$this->error['watermark'] = NULL;
$this->pathtoimage = isset($this->pathtoimage) ? $this->pathtoimage : NULL;
$this->pathtowatermark = isset($this->pathtowatermark) ? $this->pathtowatermark : NULL;
$this->valign = isset($this->valign) ? $this->valign : 'top';
$this->align = isset($this->align) ? $this->align : 'left';
$this->transparent = isset($this->transparent) ? $this->transparent : '100';
// Controleer op afbeelding
if ($this->pathtoimage == NULL){
$this->error['total_errors'] ++;
$this->error['image'] = 'No Image!';
} else
// Controleer op bestaande afbeelding
if (!file_exists($this->pathtoimage)){
$this->error['total_errors'] ++;
$this->error['image'] = 'Image Not Found!';
} else
// Controleer of het wel een afbeelding is
if (!$this->picture = getimagesize($this->pathtoimage)){
$this->error['total_errors'] ++;
$this->error['image'] = 'Not An Image!';
}
// Controleer op watermerk
if ($this->pathtowatermark == NULL){
$this->error['total_errors'] ++;
$this->error['watermark'] = 'No Watermark!';
} else
// Controleer op bestaande watermerk
if (!file_exists($this->pathtowatermark)){
$this->error['total_errors'] ++;
$this->error['watermark'] = 'Watermark Not Found!';
} else
// Controleer het watermerk is een afbeelding
if (!$this->watermark = getimagesize($this->pathtowatermark)){
$this->error['total_errors'] ++;
$this->error['watermark'] = 'Not A Watermark!';
}
// Controleer Transparant
if ($this->error['total_errors'] == '0'){
if (!is_numeric($this->transparent)){
$this->error['total_errors'] ++;
$this->error['watermark'] = 'Not A Valid Number For transparent! (USE a number BETWEEN 0 - 100)';
} else
if ($this->transparent > '100' || $this->transparent < '0'){
$this->error['total_errors'] ++;
$this->error['watermark'] = 'Not A Valid Number For transparent! (USE a number BETWEEN 0 - 100)';
} else {
if ($this->transparent > '0' && $this->transparent <= '100'){
$this->transparent = 100 - round($this->transparent);
} else {
$this->transparent = '100';
}
}
}
if ($this->error['total_errors'] == '0'){
// Controleer positie Links => Rechts
switch($this->align){
case 'left':
$this->align = '0';
break;
case 'center':
$this->align = round($this->picture['0'] / 2) - round($this->watermark['0'] / 2);
break;
case 'right':
$this->align = round($this->picture['0']) - round($this->watermark['0']);
break;
case is_numeric($this->align):
$this->align = round($this->align);
break;
default:
$this->error['total_errors'] ++;
$this->error['watermark'] = 'Not A Valid Input For align! (USE `left`, `right`, `center` OR a number)';
}
// Controleer positie Boven => Onder
switch($this->valign){
case 'top':
$this->valign = '0';
break;
case 'center':
$this->valign = round($this->picture['1'] / 2) - round($this->watermark['1'] / 2);
break;
case 'bottom':
$this->valign = round($this->picture['1']) - round($this->watermark['1']);
break;
case is_numeric($this->valign):
$this->valign = round($this->valign);
break;
default:
$this->error['total_errors'] ++;
$this->error['watermark'] = 'Not A Valid Input For valign! (USE `top`, `bottom`, `center` OR a number)';
}
}
}
// Afbeelding maken
private function createImg($image = NULL, $mime = NULL){
switch($mime){
case 'image/gif':
return imagecreatefromgif($image);
break;
case 'image/jpg':
return imagecreatefromjpeg($image);
break;
case 'image/jpeg':
return imagecreatefromjpeg($image);
break;
case 'image/png':
return imagecreatefrompng($image);
break;
default:
return imagecreatefromjpeg($image);
break;
}
}
// Afbeelding maken
private function setImage(){
$this->imgPicture = img::createImg($this->pathtoimage, $this->picture['mime']);
img::checkErrors();
}
// Watermerk maken
private function setWatermark(){
$this->imgWatermark = img::createImg($this->pathtowatermark, $this->watermark['mime']);
img::checkErrors();
}
// Toon de afbeelding
function show(){
if ($this->error['total_errors'] == '0'){
img::setImage();
img::setWatermark();
imagecopymerge($this->imgPicture, $this->imgWatermark, $this->align, $this->valign, 0, 0, $this->watermark['0'], $this->watermark['1'], $this->transparent);
switch($this->picture['mime']){
case 'image/gif':
header('Content-type: image/gif');
imagegif($this->imgPicture);
break;
case 'image/png':
header('Content-type: image/png');
imagepng($this->imgPicture);
break;
default:
header('Content-type: image/jpeg');
imagejpeg($this->imgPicture);
break;
}
imagedestroy($this->imgPicture);
imagedestroy($this->imgWatermark);
} else {
print '<h1>There Are Some Errors Found!</h1>';
print '<pre>';
print_r($this->error);
print '</pre>';
}
}
}
?>
/***********************************************************
* Een Class om een watermerk op een afbeelding te plaatsen *
***********************************************************/
class img {
// Construct => Benodigheden om de class te starten
function __construct($pathtoimage = NULL, $pathtowatermark = NULL, $watermarkalign = 'left', $watermarkvalign = 'top', $watermarktransparent = '100'){
// Afbeelding
img::image($pathtoimage);
// Watermerk
img::watermark($pathtowatermark);
// Positie van het watermerk
img::align($watermarkalign);
img::valign($watermarkvalign);
// Doorzichtigheid van het watermerk
img::transparent($watermarktransparent);
}
// Controleer de afbeelding
function image($pathtoimage = NULL){
$this->pathtoimage = $pathtoimage;
img::checkErrors();
}
// Controleer het watermerk
function watermark($pathtowatermark = NULL){
$this->pathtowatermark = $pathtowatermark;
img::checkErrors();
}
// Posititie van het watermerk (Links => Midden => Rechts => Getal [Links -> Rechts])
function align($watermarkalign = 'left'){
$this->align = $watermarkalign;
img::checkErrors();
}
// Posititie van het watermerk (Boven => Midden => Onder => Getal [Boven -> Onder])
function valign($watermarkvalign = 'top'){
$this->valign = $watermarkvalign;
img::checkErrors();
}
// Doorzichtigheid van het watermerk
function transparent($watermarktransparent = '100'){
$this->transparent = $watermarktransparent;
img::checkErrors();
}
// Controleer op fouten
private function checkErrors(){
// Standaard waarden
$this->error['total_errors'] = '0';
$this->error['image'] = NULL;
$this->error['watermark'] = NULL;
$this->pathtoimage = isset($this->pathtoimage) ? $this->pathtoimage : NULL;
$this->pathtowatermark = isset($this->pathtowatermark) ? $this->pathtowatermark : NULL;
$this->valign = isset($this->valign) ? $this->valign : 'top';
$this->align = isset($this->align) ? $this->align : 'left';
$this->transparent = isset($this->transparent) ? $this->transparent : '100';
// Controleer op afbeelding
if ($this->pathtoimage == NULL){
$this->error['total_errors'] ++;
$this->error['image'] = 'No Image!';
} else
// Controleer op bestaande afbeelding
if (!file_exists($this->pathtoimage)){
$this->error['total_errors'] ++;
$this->error['image'] = 'Image Not Found!';
} else
// Controleer of het wel een afbeelding is
if (!$this->picture = getimagesize($this->pathtoimage)){
$this->error['total_errors'] ++;
$this->error['image'] = 'Not An Image!';
}
// Controleer op watermerk
if ($this->pathtowatermark == NULL){
$this->error['total_errors'] ++;
$this->error['watermark'] = 'No Watermark!';
} else
// Controleer op bestaande watermerk
if (!file_exists($this->pathtowatermark)){
$this->error['total_errors'] ++;
$this->error['watermark'] = 'Watermark Not Found!';
} else
// Controleer het watermerk is een afbeelding
if (!$this->watermark = getimagesize($this->pathtowatermark)){
$this->error['total_errors'] ++;
$this->error['watermark'] = 'Not A Watermark!';
}
// Controleer Transparant
if ($this->error['total_errors'] == '0'){
if (!is_numeric($this->transparent)){
$this->error['total_errors'] ++;
$this->error['watermark'] = 'Not A Valid Number For transparent! (USE a number BETWEEN 0 - 100)';
} else
if ($this->transparent > '100' || $this->transparent < '0'){
$this->error['total_errors'] ++;
$this->error['watermark'] = 'Not A Valid Number For transparent! (USE a number BETWEEN 0 - 100)';
} else {
if ($this->transparent > '0' && $this->transparent <= '100'){
$this->transparent = 100 - round($this->transparent);
} else {
$this->transparent = '100';
}
}
}
if ($this->error['total_errors'] == '0'){
// Controleer positie Links => Rechts
switch($this->align){
case 'left':
$this->align = '0';
break;
case 'center':
$this->align = round($this->picture['0'] / 2) - round($this->watermark['0'] / 2);
break;
case 'right':
$this->align = round($this->picture['0']) - round($this->watermark['0']);
break;
case is_numeric($this->align):
$this->align = round($this->align);
break;
default:
$this->error['total_errors'] ++;
$this->error['watermark'] = 'Not A Valid Input For align! (USE `left`, `right`, `center` OR a number)';
}
// Controleer positie Boven => Onder
switch($this->valign){
case 'top':
$this->valign = '0';
break;
case 'center':
$this->valign = round($this->picture['1'] / 2) - round($this->watermark['1'] / 2);
break;
case 'bottom':
$this->valign = round($this->picture['1']) - round($this->watermark['1']);
break;
case is_numeric($this->valign):
$this->valign = round($this->valign);
break;
default:
$this->error['total_errors'] ++;
$this->error['watermark'] = 'Not A Valid Input For valign! (USE `top`, `bottom`, `center` OR a number)';
}
}
}
// Afbeelding maken
private function createImg($image = NULL, $mime = NULL){
switch($mime){
case 'image/gif':
return imagecreatefromgif($image);
break;
case 'image/jpg':
return imagecreatefromjpeg($image);
break;
case 'image/jpeg':
return imagecreatefromjpeg($image);
break;
case 'image/png':
return imagecreatefrompng($image);
break;
default:
return imagecreatefromjpeg($image);
break;
}
}
// Afbeelding maken
private function setImage(){
$this->imgPicture = img::createImg($this->pathtoimage, $this->picture['mime']);
img::checkErrors();
}
// Watermerk maken
private function setWatermark(){
$this->imgWatermark = img::createImg($this->pathtowatermark, $this->watermark['mime']);
img::checkErrors();
}
// Toon de afbeelding
function show(){
if ($this->error['total_errors'] == '0'){
img::setImage();
img::setWatermark();
imagecopymerge($this->imgPicture, $this->imgWatermark, $this->align, $this->valign, 0, 0, $this->watermark['0'], $this->watermark['1'], $this->transparent);
switch($this->picture['mime']){
case 'image/gif':
header('Content-type: image/gif');
imagegif($this->imgPicture);
break;
case 'image/png':
header('Content-type: image/png');
imagepng($this->imgPicture);
break;
default:
header('Content-type: image/jpeg');
imagejpeg($this->imgPicture);
break;
}
imagedestroy($this->imgPicture);
imagedestroy($this->imgWatermark);
} else {
print '<h1>There Are Some Errors Found!</h1>';
print '<pre>';
print_r($this->error);
print '</pre>';
}
}
}
?>
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
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
<?php
// Start een sessie
session_start();
// Ophalen van Class
require_once('image.inc.php');
// OPTIE 1
$img = new img('image.jpg', 'watermark.gif', 'center', 'center', '50');
if ($img->error['total'] != '0'){
print '<pre>';
print_r($img);
print '</pre>';
} else {
$img->show();
}
// OPTIE 2
$img = new img();
$img->image('image.jpg'); // URL naar de afbeelding
$img->watermark('watermark.gif'); // URL naar het watermerk
$img->align('center'); // Positie van het watermerk (Left, Center, Right of een getal...
$img->valign('center'); // Positie van het watermerk (Top, Center, Bottom of een getal...
$img->transparent('50'); // Doorzichtigheid van het watermerk (0 -> 100);
if ($img->error['total'] != '0'){
print '<pre>';
print_r($img);
print '</pre>';
} else {
$img->show();
}
?>
// Start een sessie
session_start();
// Ophalen van Class
require_once('image.inc.php');
// OPTIE 1
$img = new img('image.jpg', 'watermark.gif', 'center', 'center', '50');
if ($img->error['total'] != '0'){
print '<pre>';
print_r($img);
print '</pre>';
} else {
$img->show();
}
// OPTIE 2
$img = new img();
$img->image('image.jpg'); // URL naar de afbeelding
$img->watermark('watermark.gif'); // URL naar het watermerk
$img->align('center'); // Positie van het watermerk (Left, Center, Right of een getal...
$img->valign('center'); // Positie van het watermerk (Top, Center, Bottom of een getal...
$img->transparent('50'); // Doorzichtigheid van het watermerk (0 -> 100);
if ($img->error['total'] != '0'){
print '<pre>';
print_r($img);
print '</pre>';
} else {
$img->show();
}
?>
Titel aangepast, zo is het wat duidelijker.[/modedit]
Gewijzigd op 10/01/2012 19:39:24 door G P
Straks eens uitproberen.
Ik zie wel nog een mogelijkheid om iets toe te voegen.
Wanneer je zo'n soort dingen doet:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$img = new img();
$img->image('image.jpg'); // URL naar de afbeelding
$img->watermark('watermark.gif'); // URL naar het watermerk
$img->align('center'); // Positie van het watermerk (Left, Center, Right of een getal...
...
?>
$img = new img();
$img->image('image.jpg'); // URL naar de afbeelding
$img->watermark('watermark.gif'); // URL naar het watermerk
$img->align('center'); // Positie van het watermerk (Left, Center, Right of een getal...
...
?>
Het is ook mogelijk dat je het zo doet:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$img = new img();
$img->image('image.jpg') // URL naar de afbeelding
->watermark('watermark.gif') // URL naar het watermerk
->align('center'); // Positie van het watermerk (Left, Center, Right of een getal...
...
?>
$img = new img();
$img->image('image.jpg') // URL naar de afbeelding
->watermark('watermark.gif') // URL naar het watermerk
->align('center'); // Positie van het watermerk (Left, Center, Right of een getal...
...
?>
Wat moet je dan doen? Simpelweg al die functies waarbij je gegevens in het object pompt, die eindig je allemaal met
Probeer eens met exceptions te werken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// Start een sessie
session_start();
// Ophalen van Class
require_once('function.inc.php');
// OPTIE 1
$img = new img('image.jpg', 'watermark.gif', 'center', 'center', '50');
$img->show();
// OPTIE 2
$img = new img();
$img->image('lightbulb.jpg'); // URL naar de afbeelding
$img->watermark('watermark.gif'); // URL naar het watermerk
$img->align('right'); // Positie van het watermerk (Left, Center, Right of een getal...
$img->valign('bottom'); // Positie van het watermerk (Top, Center, Bottom of een getal...
$img->transparent('75'); // Doorzichtigheid van het watermerk (0 -> 100);
$img->show();
?>
// Start een sessie
session_start();
// Ophalen van Class
require_once('function.inc.php');
// OPTIE 1
$img = new img('image.jpg', 'watermark.gif', 'center', 'center', '50');
$img->show();
// OPTIE 2
$img = new img();
$img->image('lightbulb.jpg'); // URL naar de afbeelding
$img->watermark('watermark.gif'); // URL naar het watermerk
$img->align('right'); // Positie van het watermerk (Left, Center, Right of een getal...
$img->valign('bottom'); // Positie van het watermerk (Top, Center, Bottom of een getal...
$img->transparent('75'); // Doorzichtigheid van het watermerk (0 -> 100);
$img->show();
?>
Update Info:
1) Foutmelding tonen als er fouten zijn toon anders de afbeelding
2) Transparent rekent nu in %, 100 = is onzichtbaar, 0 = volledig zichtbaar.
3) Klein foutje bij error[total_errors] is weg gewerkt
Toevoeging op 10/01/2012 19:48:21:
@Kris: Geen return
@Pim: Dat zal de volgende stap zijn... ben aan het leren in kleine stapjes...
$img->image(...), het is misschien handig om er setImage() van te maken.
Dat zegt n.l. meer dan alleen image.
"getter & setters, query & command, that kind of things...."
@Jim: Inderdaad, setImage en setWatermark zal duidelijker zijn, handige tip! :)
Alleen lijkt het er op dat enkel public niet expliciet vermeld wordt, wegens toch default
Daarnaast zie ik nog het volgende:
0 is een integer dus dan moet je dat ook als integer controleren.
Ook zie ik dat hij diversen variabelen gebruikt maar die niet gedefinieerd heeft.
Maar goed dit is nog het belangrijkste:
Quote:
Een watermerk een een afbeelding zijn toch twee verschillende zaken? Afgezien van het feit dat ze wel met elkaar te maken hebben.
Gewijzigd op 11/01/2012 11:29:53 door Niels K
Ook img::image($pathtoimage) of al die andere methods die je aanroept in de class zelf. Het is toch veel beter om $this->image($pathtoimage) te gebruiken?
Gunther Peeters op 10/01/2012 19:46:24:
...
@Kris: Geen return
...
@Kris: Geen return
...
Ik zal eens tonen wat ik bedoel.
Dit is jouw script, maar een beetje aangepast.
index.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
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
<?php
/*
Dit script verwacht drie files: "watermark.gif", "trein.jpg" en "auto.jpg"
*/
session_start();
require_once('watermark.php');
if (!empty($_GET['w'])) {
switch($_GET['w']) {
case 1:
$img = new img();
$img->image('trein.jpg') // URL naar de afbeelding
->watermark('watermark.gif') // URL naar het watermerk
->align('right') // Positie van het watermerk (Left, Center, Right of een getal...
->valign('bottom') // Positie van het watermerk (Top, Center, Bottom of een getal...
->transparent('50'); // Doorzichtigheid van het watermerk (0 -> 100);
if ($img->error['total'] != '0') {
print '<pre>';
print_r($img);
print '</pre>';
} else {
$img->show();
}
break;
case 2:
$img = new img();
$img->image('auto.jpg') // URL naar de afbeelding
->watermark('watermark.gif') // URL naar het watermerk
->align('left') // Positie van het watermerk (Left, Center, Right of een getal...
->valign('top') // Positie van het watermerk (Top, Center, Bottom of een getal...
->transparent('50'); // Doorzichtigheid van het watermerk (0 -> 100);
if ($img->error['total'] != '0') {
print '<pre>';
print_r($img);
print '</pre>';
} else {
$img->show();
}
break;
}
}
else {
echo '<img src="?w=1"/> <img src="?w=2"/>';
}
?>
/*
Dit script verwacht drie files: "watermark.gif", "trein.jpg" en "auto.jpg"
*/
session_start();
require_once('watermark.php');
if (!empty($_GET['w'])) {
switch($_GET['w']) {
case 1:
$img = new img();
$img->image('trein.jpg') // URL naar de afbeelding
->watermark('watermark.gif') // URL naar het watermerk
->align('right') // Positie van het watermerk (Left, Center, Right of een getal...
->valign('bottom') // Positie van het watermerk (Top, Center, Bottom of een getal...
->transparent('50'); // Doorzichtigheid van het watermerk (0 -> 100);
if ($img->error['total'] != '0') {
print '<pre>';
print_r($img);
print '</pre>';
} else {
$img->show();
}
break;
case 2:
$img = new img();
$img->image('auto.jpg') // URL naar de afbeelding
->watermark('watermark.gif') // URL naar het watermerk
->align('left') // Positie van het watermerk (Left, Center, Right of een getal...
->valign('top') // Positie van het watermerk (Top, Center, Bottom of een getal...
->transparent('50'); // Doorzichtigheid van het watermerk (0 -> 100);
if ($img->error['total'] != '0') {
print '<pre>';
print_r($img);
print '</pre>';
} else {
$img->show();
}
break;
}
}
else {
echo '<img src="?w=1"/> <img src="?w=2"/>';
}
?>
watermark.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
<?php
/***********************************************************
* Een Class om een watermerk op een afbeelding te plaatsen *
***********************************************************/
class img {
// Construct => Benodigheden om de class te starten
function __construct($pathtoimage = NULL, $pathtowatermark = NULL, $watermarkalign = 'left', $watermarkvalign = 'top', $watermarktransparent = '100') {
// Foutmeldingen
$this->error['total'] = '0';
$this->error['image'] = $pathtoimage;
$this->error['watermark'] = $pathtowatermark;
// Afbeelding
if ($pathtoimage != NULL) { img::image($pathtoimage); }
// Watermerk
if ($pathtowatermark != NULL) { img::watermark($pathtowatermark); }
// Positie van het watermerk
img::align($watermarkalign);
img::valign($watermarkvalign);
// Doorzichtigheid van het watermerk
img::transparent($watermarktransparent);
}
// Controleer de afbeelding
function image($pathtoimage = NULL) {
$this->error['image'] = $pathtoimage;
// Controleer op afbeelding
if ($this->error['image'] == NULL) {
$this->error['total'] ++;
$this->error['image'] = 'No Image!';
} else
// Controleer op bestaande afbeelding
if (!file_exists($this->error['image'])) {
$this->error['total'] ++;
$this->error['image'] = 'Image Not Found!';
} else
if (!$this->picture = getimagesize($this->error['image'])) {
$this->error['total'] ++;
$this->error['image'] = 'Not An Image!';
}
return $this;
}
// Controleer het watermerk
function watermark($pathtowatermark = NULL) {
$this->error['watermark'] = $pathtowatermark;
// Controleer op watermerk
if ($this->error['watermark'] == NULL) {
$this->error['total'] ++;
$this->error['watermark'] = 'No Watermark!';
} else
// Controleer op bestaande watermerk
if (!file_exists($this->error['watermark'])) {
$this->error['total'] ++;
$this->error['watermark'] = 'Watermark Not Found!';
} else
// Controleer het watermerk is een afbeelding
if (!$this->watermark = getimagesize($this->error['watermark'])) {
$this->error['total'] ++;
$this->error['watermark'] = 'Not A Watermark!';
}
return $this;
}
// Posititie van het watermerk (Links => Midden => Rechts => Getal [Links -> Rechts])
function align($watermarkalign = 'left') {
if ($this->error['total'] == '0') {
switch($watermarkalign) {
case 'left':
$this->align = '0';
break;
case 'center':
$this->align = round($this->picture['0'] / 2) - round($this->watermark['0'] / 2);
break;
case 'right':
$this->align = round($this->picture['0']) - round($this->watermark['0']);
break;
case is_numeric($watermarkalign):
$this->align = round($watermarkalign);
break;
default:
$this->error['total'] ++;
$this->error['watermark'] = 'Not A Valid Input For align! (USE `left`, `right`, `center` OR a number)';
}
}
return $this;
}
// Posititie van het watermerk (Boven => Midden => Onder => Getal [Boven -> Onder])
function valign($watermarkvalign = 'top') {
if ($this->error['total'] == '0') {
switch($watermarkvalign) {
case 'top':
$this->valign = '0';
break;
case 'center':
$this->valign = round($this->picture['1'] / 2) - round($this->watermark['1'] / 2);
break;
case 'bottom':
$this->valign = round($this->picture['1']) - round($this->watermark['1']);
break;
case is_numeric($watermarkvalign):
$this->valign = round($watermarkvalign);
break;
default:
$this->error['total'] ++;
$this->error['watermark'] = 'Not A Valid Input For valign! (USE `top`, `bottom`, `center` OR a number)';
}
}
return $this;
}
// Doorzichtigheid van het watermerk
function transparent($watermarktransparent = '100') {
if (!is_numeric($watermarktransparent)) {
$this->error['total'] ++;
$this->error['watermark'] = 'Not A Valid Number For transparent! (USE a number BETWEEN 0 - 100)';
} else
if ($watermarktransparent > '100' || $watermarktransparent < '0') {
$this->error['total'] ++;
$this->error['watermark'] = 'Not A Valid Number For transparent! (USE a number BETWEEN 0 - 100)';
} else {
$this->transparent = round($watermarktransparent);
}
return $this;
}
// Afbeelding maken
private function createImg($image = NULL, $mime = NULL) {
switch($mime) {
case 'image/gif':
return imagecreatefromgif($image);
break;
case 'image/jpg':
return imagecreatefromjpeg($image);
break;
case 'image/jpeg':
return imagecreatefromjpeg($image);
break;
case 'image/png':
return imagecreatefrompng($image);
break;
default:
return imagecreatefromjpeg($image);
break;
}
}
// Afbeelding maken
private function setImage() {
$this->imgPicture = img::createImg($this->error['image'], $this->picture['mime']);
}
// Watermerk maken
private function setWatermark() {
$this->imgWatermark = img::createImg($this->error['watermark'], $this->watermark['mime']);
}
// Toon de afbeelding
function show() {
img::setImage();
img::setWatermark();
imagecopymerge($this->imgPicture, $this->imgWatermark, $this->align, $this->valign, 0, 0, $this->watermark['0'], $this->watermark['1'], $this->transparent);
switch($this->picture['mime']) {
case 'image/gif':
header('Content-type: image/gif');
imagegif($this->imgPicture);
break;
case 'image/png':
header('Content-type: image/png');
imagepng($this->imgPicture);
break;
default:
header('Content-type: image/jpeg');
imagejpeg($this->imgPicture);
break;
}
imagedestroy($this->imgPicture);
imagedestroy($this->imgWatermark);
}
}
?>
/***********************************************************
* Een Class om een watermerk op een afbeelding te plaatsen *
***********************************************************/
class img {
// Construct => Benodigheden om de class te starten
function __construct($pathtoimage = NULL, $pathtowatermark = NULL, $watermarkalign = 'left', $watermarkvalign = 'top', $watermarktransparent = '100') {
// Foutmeldingen
$this->error['total'] = '0';
$this->error['image'] = $pathtoimage;
$this->error['watermark'] = $pathtowatermark;
// Afbeelding
if ($pathtoimage != NULL) { img::image($pathtoimage); }
// Watermerk
if ($pathtowatermark != NULL) { img::watermark($pathtowatermark); }
// Positie van het watermerk
img::align($watermarkalign);
img::valign($watermarkvalign);
// Doorzichtigheid van het watermerk
img::transparent($watermarktransparent);
}
// Controleer de afbeelding
function image($pathtoimage = NULL) {
$this->error['image'] = $pathtoimage;
// Controleer op afbeelding
if ($this->error['image'] == NULL) {
$this->error['total'] ++;
$this->error['image'] = 'No Image!';
} else
// Controleer op bestaande afbeelding
if (!file_exists($this->error['image'])) {
$this->error['total'] ++;
$this->error['image'] = 'Image Not Found!';
} else
if (!$this->picture = getimagesize($this->error['image'])) {
$this->error['total'] ++;
$this->error['image'] = 'Not An Image!';
}
return $this;
}
// Controleer het watermerk
function watermark($pathtowatermark = NULL) {
$this->error['watermark'] = $pathtowatermark;
// Controleer op watermerk
if ($this->error['watermark'] == NULL) {
$this->error['total'] ++;
$this->error['watermark'] = 'No Watermark!';
} else
// Controleer op bestaande watermerk
if (!file_exists($this->error['watermark'])) {
$this->error['total'] ++;
$this->error['watermark'] = 'Watermark Not Found!';
} else
// Controleer het watermerk is een afbeelding
if (!$this->watermark = getimagesize($this->error['watermark'])) {
$this->error['total'] ++;
$this->error['watermark'] = 'Not A Watermark!';
}
return $this;
}
// Posititie van het watermerk (Links => Midden => Rechts => Getal [Links -> Rechts])
function align($watermarkalign = 'left') {
if ($this->error['total'] == '0') {
switch($watermarkalign) {
case 'left':
$this->align = '0';
break;
case 'center':
$this->align = round($this->picture['0'] / 2) - round($this->watermark['0'] / 2);
break;
case 'right':
$this->align = round($this->picture['0']) - round($this->watermark['0']);
break;
case is_numeric($watermarkalign):
$this->align = round($watermarkalign);
break;
default:
$this->error['total'] ++;
$this->error['watermark'] = 'Not A Valid Input For align! (USE `left`, `right`, `center` OR a number)';
}
}
return $this;
}
// Posititie van het watermerk (Boven => Midden => Onder => Getal [Boven -> Onder])
function valign($watermarkvalign = 'top') {
if ($this->error['total'] == '0') {
switch($watermarkvalign) {
case 'top':
$this->valign = '0';
break;
case 'center':
$this->valign = round($this->picture['1'] / 2) - round($this->watermark['1'] / 2);
break;
case 'bottom':
$this->valign = round($this->picture['1']) - round($this->watermark['1']);
break;
case is_numeric($watermarkvalign):
$this->valign = round($watermarkvalign);
break;
default:
$this->error['total'] ++;
$this->error['watermark'] = 'Not A Valid Input For valign! (USE `top`, `bottom`, `center` OR a number)';
}
}
return $this;
}
// Doorzichtigheid van het watermerk
function transparent($watermarktransparent = '100') {
if (!is_numeric($watermarktransparent)) {
$this->error['total'] ++;
$this->error['watermark'] = 'Not A Valid Number For transparent! (USE a number BETWEEN 0 - 100)';
} else
if ($watermarktransparent > '100' || $watermarktransparent < '0') {
$this->error['total'] ++;
$this->error['watermark'] = 'Not A Valid Number For transparent! (USE a number BETWEEN 0 - 100)';
} else {
$this->transparent = round($watermarktransparent);
}
return $this;
}
// Afbeelding maken
private function createImg($image = NULL, $mime = NULL) {
switch($mime) {
case 'image/gif':
return imagecreatefromgif($image);
break;
case 'image/jpg':
return imagecreatefromjpeg($image);
break;
case 'image/jpeg':
return imagecreatefromjpeg($image);
break;
case 'image/png':
return imagecreatefrompng($image);
break;
default:
return imagecreatefromjpeg($image);
break;
}
}
// Afbeelding maken
private function setImage() {
$this->imgPicture = img::createImg($this->error['image'], $this->picture['mime']);
}
// Watermerk maken
private function setWatermark() {
$this->imgWatermark = img::createImg($this->error['watermark'], $this->watermark['mime']);
}
// Toon de afbeelding
function show() {
img::setImage();
img::setWatermark();
imagecopymerge($this->imgPicture, $this->imgWatermark, $this->align, $this->valign, 0, 0, $this->watermark['0'], $this->watermark['1'], $this->transparent);
switch($this->picture['mime']) {
case 'image/gif':
header('Content-type: image/gif');
imagegif($this->imgPicture);
break;
case 'image/png':
header('Content-type: image/png');
imagepng($this->imgPicture);
break;
default:
header('Content-type: image/jpeg');
imagejpeg($this->imgPicture);
break;
}
imagedestroy($this->imgPicture);
imagedestroy($this->imgWatermark);
}
}
?>
Gewijzigd op 11/01/2012 12:51:49 door Kris Peeters
Dit zijn static aanroepen en niet object aanroepen. Geen idee waarom je dat doet je functies zijn ook niet static. Do you know?
Als de functie niet static is, spreek je ze aan met $this->functienaam(), als ze static zijn met self::functienaam()
Hartelijk bedankt iedereen voor al deze mooie commentaren, ik zal hierbij ZEKER rekening houden. Zodra dit script een update krijgt zal ik deze ook meteen plaatsen.
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
<?php
class newImage {
// STAAT HIER MAAR OM ZAKEN TOE TE VOEGEN ALS HET NODIG IS BIJ EEN UPDATE
public function __construct(){
}
/**************************************************\
URL NAAR AFBEELDING
\**************************************************/
public function set_image($path_to_image = false, $opacity = 0, $rotate = 0){
if ($path_to_image && file_exists($path_to_image)){
$this->path_to_image = $path_to_image;
}
if ($rotate < 0){
$rotate = 0;
} elseif ($rotate > 360){
$rotate = 360;
} else {
$rotate = floor($rotate);
}
$this->imageRotate = $rotate;
$this->checkImage();
}
/**************************************************\
URL NAAR WATERMERK
\**************************************************/
public function set_watermark($path_to_watermark = false, $horizontal_position = 'center', $vertical_position = 'center', $opacity = 0, $rotate = 0){
if ($path_to_watermark && file_exists($path_to_watermark)){
$this->path_to_watermark = $path_to_watermark;
if ($rotate < 0){
$rotate = 0;
} elseif ($rotate > 360){
$rotate = 360;
} else {
$rotate = floor($rotate);
}
$this->watermarkHorizontalPosition = $horizontal_position;
$this->watermarkVerticalPosition = $vertical_position;
$this->watermarkRotate = $rotate;
$this->checkWatermark();
}
}
/**************************************************\
TEKST GEGEVENS
\**************************************************/
public function set_text($text_string = NULL, $text_color = '900', $background_color = 'FFF', $font_size = 0){
// CONTROLEER AFBEELDING
$this->showImage = isset($this->showImage) ? $this->showImage : NULL;
if (!$this->showImage){ $this->checkImage(); }
// CONTROLEER TEKST
if (!$text_string && strlen($text_string) < 1){
$this->text = 'Damn... You\'ve forgotten the text !';
} else {
$this->text = $text_string;
}
// CONTROLEER TEKSTKLEUR
if ($text_color && strlen($text_color) >= 3 && strlen($text_color) <= 7){
$text_color = '#'.str_replace('#', '', $text_color);
} else {
$text_color = '#FFF';
}
$this->text_color = $this->hex2RGB($text_color);
// CONTROLEER ACHTERGROND KLEUR
if ($background_color && strlen($background_color) >= 3 && strlen($background_color) <= 7){
$background_color = '#'.str_replace('#', '', $background_color);
} else {
$background_color = '#000';
}
$this->background_color = $this->hex2RGB($background_color);
// CONTROLEER TEKST GROOTTE
$this->font_size = round($font_size) > 62 ? 62 :
round($font_size) < 12 ? 12 :
round($font_size);
$this->checkText();
}
/**************************************************\
KLEUR VERANDEREN
\**************************************************/
public function swap_colors($old_color = 'FFF', $new_color = '000'){
// CONTROLEER AFBEELDING
$this->showImage = isset($this->showImage) ? $this->showImage : NULL;
if (!$this->showImage){ $this->checkImage(); }
// CONTROLEER OUDE KLEUR
if ($old_color && strlen($old_color) >= 3 && strlen($old_color) <= 7){
$old_color = '#'.str_replace('#', '', $old_color);
} else {
$old_color = '#FFF';
}
$old_rgb = $this->hex2RGB($old_color);
// CONTROLEER NIEUWE KLEUR
if ($new_color && strlen($new_color) >= 3 && strlen($new_color) <= 7){
$new_color = '#'.str_replace('#', '', $new_color);
} else {
$new_color = '#FFF';
}
$new_rgb = $this->hex2RGB($new_color);
// KLEUR WISSELEN
imagetruecolortopalette($this->showImage, true, 216);
$switchColor = imagecolorclosest($this->showImage, $old_rgb['red'], $old_rgb['green'], $old_rgb['blue']);
imagecolorset($this->showImage, $switchColor, $new_rgb['red'], $new_rgb['green'], $new_rgb['blue']);
}
/**************************************************\
AFBEELDING CONTROLEREN
\**************************************************/
private function checkImage(){
// CONTROLEER PAD NAAR DE AFBEELDING
$this->path_to_image = isset($this->path_to_image) ? $this->path_to_image : false;
if ($this->path_to_image){
// OPHALEN VAN AFBEELDING GEGEVENS
$infoImage = getimagesize($this->path_to_image);
// JPG / JPEG
if ($infoImage['mime'] == 'image/jpeg'){
$image = @imagecreatefromjpeg($this->path_to_image);
} else
// PNG
if ($infoImage['mime'] == 'image/png'){
$image = @imagecreatefrompng($this->path_to_image);
} else
// GIF
if ($infoImage['mime'] == 'image/gif'){
$image = @imagecreatefromgif($this->path_to_image);
} else
// GEEN AFBEELDING GEVONDEN MAAK ZELF
{
$image = @imagecreate(500, 500);
imagecolorallocatealpha($image, 0, 0, 0, 0);
$infoImage['0'] = 500;
$infoImage['1'] = 500;
}
} else {
$image = @imagecreate(500, 500);
imagecolorallocatealpha($image, 0, 0, 0, 0);
$infoImage['0'] = 500;
$infoImage['1'] = 500;
}
// AFBEELDING DRAAIEN
$image = imagerotate($image, $this->imageRotate, imagecolorallocatealpha($image, 0, 0, 0, 127));
imagealphablending($image, false);
imagesavealpha($image, true);
// DOORSTUREN VAN BENODIGDE GEGEVENS
$this->showImage = $image;
$this->image_width = imagesx($image);
$this->image_height = imagesy($image);
}
/**************************************************\
WATERMERK CONTROLEREN
\**************************************************/
private function checkWatermark(){
// CONTROLEER AFBEELDING
$this->showImage = isset($this->showImage) ? $this->showImage : NULL;
if (!$this->showImage){ $this->checkImage(); }
// CONTROLEER PAD NAAR HET WATERMERK
$this->path_to_watermark = isset($this->path_to_watermark) ? $this->path_to_watermark : false;
if ($this->path_to_watermark){
// INFORMATIE VAN HET WATERMERK
$infoWatermark = getimagesize($this->path_to_watermark);
// JPG / JPEG
if ($infoWatermark['mime'] == 'image/jpeg'){
$watermark = @imagecreatefromjpeg($this->path_to_watermark);
} else
// PNG
if ($infoWatermark['mime'] == 'image/png'){
$watermark = @imagecreatefrompng($this->path_to_watermark);
} else
// GIF
if ($infoWatermark['mime'] == 'image/gif'){
$watermark = @imagecreatefromgif($this->path_to_watermark);
}
$bg = imagecolorallocatealpha($watermark, 0, 0, 0, 127);
imagefill($watermark, 0, 0 , $bg);
// AFBEELDING DRAAIEN
$watermark = imagerotate($watermark, $this->watermarkRotate, $bg);
imagealphablending($watermark, false);
imagesavealpha($watermark, true);
// BEREKENING OM HET WATERMERK IN HET MIDDEN VAN DE AFBEELDING TE PLAATSEN
$width = imagesx($watermark);
$height = imagesy($watermark);
// WATERMERK HORIZONTAAL POSITIONEREN
if ($this->watermarkHorizontalPosition == 'center'){
$center_x = ($this->image_width - $width) / 2;
} elseif ($this->watermarkHorizontalPosition == 'left'){
$center_x = 0;
} elseif ($this->watermarkHorizontalPosition == 'right'){
$center_x = $this->image_width - $width;
} else {
$center_x = round($this->watermarkHorizontalPosition);
if (($center_x + $width) > $this->image_width){
$center_x = $this->image_width - $width;
} elseif ($this->watermarkHorizontalPosition < 0){
$center_x = ($this->image_width - $width) + $this->watermarkHorizontalPosition;
if ($center_x < 0){ $center_x = 0; }
}
}
// WATERMERK VERTIKAAL POSITIONEREN
if ($this->watermarkVerticalPosition == 'center'){
$center_y = ($this->image_height - $height) / 2;
} elseif ($this->watermarkVerticalPosition == 'top'){
$center_y = 0;
} elseif ($this->watermarkVerticalPosition == 'bottom'){
$center_y = $this->image_height - $height;
} else {
$center_y = round($this->watermarkVerticalPosition);
if (($center_y + $width) > $this->image_height){
$center_y = $this->image_height - $width;
} elseif ($this->watermarkVerticalPosition < 0){
$center_y = ($this->image_height - $width) + $this->watermarkVerticalPosition;
if ($center_y < 0){ $center_y = 0; }
}
}
imagecopy($this->showImage, $watermark, $center_x, $center_y, 0, 0, $width, $height);
}
}
/**************************************************\
TEKST CONTROLEREN
\**************************************************/
private function checkText(){
// CONTROLEER AFBEELDING
$this->showImage = isset($this->showImage) ? $this->showImage : NULL;
if (!$this->showImage){ $this->checkImage(); }
// CONTROLEER TEKST
$this->text = isset($this->text) ? $this->text : false;
if ($this->text){
// MAAK ACHTERGROND
$box_width = $this->image_width;
$box_height = $this->font_size * 2;
$box = imagecreatetruecolor($box_width, $box_height);
$boxcolor = imagecolorallocatealpha($box, $this->background_color['red'], $this->background_color['green'], $this->background_color['blue'], 0);
imagefilledrectangle($box, 0, 0, $box_width, $box_height, $boxcolor);
// MAAK TEKST
$x_box = ($box_width / 2) - ((strlen($this->text) * $this->font_size) / 2.75);
$y_box = ($this->font_size * 1.5);
$textColor = imagecolorallocatealpha($box, $this->text_color['red'], $this->text_color['green'], $this->text_color['blue'], 0);
$font = 'BKANT.TTF'; // WIJZIG DE NAAM NAAR JOUW FONT-TYPE
imagefttext($box, $this->font_size, 0, $x_box, $y_box, $textColor, $font, $this->text);
// TEKST IN HET MIDDEN PLAATSEN
$center = ($this->image_height / 2) - ($box_height / 2);
imagecopy($this->showImage, $box, 0, $center, 0, 0, $box_width, $box_height);
}
}
/**************************************************\
OMZETTEN KLEUR VAN HEX NAAR DEC
\**************************************************/
private function hex2RGB($hexStr) {
// VERWIJDER ONNODIGE TEKENS
$hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr);
$rgbArray = array();
// OMZETTEN VAN 6 TEKENS NAAR RGB
if (strlen($hexStr) == 6) {
$colorVal = hexdec($hexStr);
$rgbArray['red'] = 0xFF & ($colorVal >> 0x10);
$rgbArray['green'] = 0xFF & ($colorVal >> 0x8);
$rgbArray['blue'] = 0xFF & $colorVal;
} else
// OMZETTEN VAN 3 TEKENS NAAR RGB
if (strlen($hexStr) == 3) {
$rgbArray['red'] = hexdec(str_repeat(substr($hexStr, 0, 1), 2));
$rgbArray['green'] = hexdec(str_repeat(substr($hexStr, 1, 1), 2));
$rgbArray['blue'] = hexdec(str_repeat(substr($hexStr, 2, 1), 2));
} else
// ONGELDIG KLEURWAARDE
{
return false;
}
// TERUG STUREN VAN RGB
return $rgbArray;
}
/**************************************************\
TOON DE AFBEELDING
\**************************************************/
public function show_image(){
// CONTROLEER AFBEELDING
$this->showImage = isset($this->showImage) ? $this->showImage : NULL;
if (!$this->showImage){ $this->checkImage(); }
// AFBEELDING TONEN
header('Content-Type: image/png');
imagepng($this->showImage);
imagedestroy($this->showImage);
}
/**************************************************\
BEWAAR DE AFBEELDING
\**************************************************/
public function save_image($new_name = NULL, $save_to_folder = NULL, $show_image = false){
// CONTROLEER AFBEELDING
$this->showImage = isset($this->showImage) ? $this->showImage : NULL;
if (!$this->showImage){ $this->checkImage(); }
// CONTROLEER NAAM
if (!$new_name || strlen($new_name) < '1' || strlen($new_name) > '255'){
$new_name = time();
}
// CONTROLEER MAP
if (!$save_to_folder || strlen($save_to_folder) < 1){ $save_to_folder = '.'; }
$i = 0;
$checkName = $new_name;
// GEEF EEN NIEUWE NAAM ALS DE AFBEELDING AL BESTAAT
while (file_exists($save_to_folder.'/'.$new_name.'.png')){
$i++;
$new_name = $checkName.'_'.$i;
}
// AFBEELDING TONEN ?
if ($show_image === true){
header('Content-Type: image/png');
imagepng($this->showImage);
}
// BEWAREN
imagepng($this->showImage, $save_to_folder.'/'.$new_name.'.png');
imagedestroy($this->showImage);
}
}
}
?>
class newImage {
// STAAT HIER MAAR OM ZAKEN TOE TE VOEGEN ALS HET NODIG IS BIJ EEN UPDATE
public function __construct(){
}
/**************************************************\
URL NAAR AFBEELDING
\**************************************************/
public function set_image($path_to_image = false, $opacity = 0, $rotate = 0){
if ($path_to_image && file_exists($path_to_image)){
$this->path_to_image = $path_to_image;
}
if ($rotate < 0){
$rotate = 0;
} elseif ($rotate > 360){
$rotate = 360;
} else {
$rotate = floor($rotate);
}
$this->imageRotate = $rotate;
$this->checkImage();
}
/**************************************************\
URL NAAR WATERMERK
\**************************************************/
public function set_watermark($path_to_watermark = false, $horizontal_position = 'center', $vertical_position = 'center', $opacity = 0, $rotate = 0){
if ($path_to_watermark && file_exists($path_to_watermark)){
$this->path_to_watermark = $path_to_watermark;
if ($rotate < 0){
$rotate = 0;
} elseif ($rotate > 360){
$rotate = 360;
} else {
$rotate = floor($rotate);
}
$this->watermarkHorizontalPosition = $horizontal_position;
$this->watermarkVerticalPosition = $vertical_position;
$this->watermarkRotate = $rotate;
$this->checkWatermark();
}
}
/**************************************************\
TEKST GEGEVENS
\**************************************************/
public function set_text($text_string = NULL, $text_color = '900', $background_color = 'FFF', $font_size = 0){
// CONTROLEER AFBEELDING
$this->showImage = isset($this->showImage) ? $this->showImage : NULL;
if (!$this->showImage){ $this->checkImage(); }
// CONTROLEER TEKST
if (!$text_string && strlen($text_string) < 1){
$this->text = 'Damn... You\'ve forgotten the text !';
} else {
$this->text = $text_string;
}
// CONTROLEER TEKSTKLEUR
if ($text_color && strlen($text_color) >= 3 && strlen($text_color) <= 7){
$text_color = '#'.str_replace('#', '', $text_color);
} else {
$text_color = '#FFF';
}
$this->text_color = $this->hex2RGB($text_color);
// CONTROLEER ACHTERGROND KLEUR
if ($background_color && strlen($background_color) >= 3 && strlen($background_color) <= 7){
$background_color = '#'.str_replace('#', '', $background_color);
} else {
$background_color = '#000';
}
$this->background_color = $this->hex2RGB($background_color);
// CONTROLEER TEKST GROOTTE
$this->font_size = round($font_size) > 62 ? 62 :
round($font_size) < 12 ? 12 :
round($font_size);
$this->checkText();
}
/**************************************************\
KLEUR VERANDEREN
\**************************************************/
public function swap_colors($old_color = 'FFF', $new_color = '000'){
// CONTROLEER AFBEELDING
$this->showImage = isset($this->showImage) ? $this->showImage : NULL;
if (!$this->showImage){ $this->checkImage(); }
// CONTROLEER OUDE KLEUR
if ($old_color && strlen($old_color) >= 3 && strlen($old_color) <= 7){
$old_color = '#'.str_replace('#', '', $old_color);
} else {
$old_color = '#FFF';
}
$old_rgb = $this->hex2RGB($old_color);
// CONTROLEER NIEUWE KLEUR
if ($new_color && strlen($new_color) >= 3 && strlen($new_color) <= 7){
$new_color = '#'.str_replace('#', '', $new_color);
} else {
$new_color = '#FFF';
}
$new_rgb = $this->hex2RGB($new_color);
// KLEUR WISSELEN
imagetruecolortopalette($this->showImage, true, 216);
$switchColor = imagecolorclosest($this->showImage, $old_rgb['red'], $old_rgb['green'], $old_rgb['blue']);
imagecolorset($this->showImage, $switchColor, $new_rgb['red'], $new_rgb['green'], $new_rgb['blue']);
}
/**************************************************\
AFBEELDING CONTROLEREN
\**************************************************/
private function checkImage(){
// CONTROLEER PAD NAAR DE AFBEELDING
$this->path_to_image = isset($this->path_to_image) ? $this->path_to_image : false;
if ($this->path_to_image){
// OPHALEN VAN AFBEELDING GEGEVENS
$infoImage = getimagesize($this->path_to_image);
// JPG / JPEG
if ($infoImage['mime'] == 'image/jpeg'){
$image = @imagecreatefromjpeg($this->path_to_image);
} else
// PNG
if ($infoImage['mime'] == 'image/png'){
$image = @imagecreatefrompng($this->path_to_image);
} else
// GIF
if ($infoImage['mime'] == 'image/gif'){
$image = @imagecreatefromgif($this->path_to_image);
} else
// GEEN AFBEELDING GEVONDEN MAAK ZELF
{
$image = @imagecreate(500, 500);
imagecolorallocatealpha($image, 0, 0, 0, 0);
$infoImage['0'] = 500;
$infoImage['1'] = 500;
}
} else {
$image = @imagecreate(500, 500);
imagecolorallocatealpha($image, 0, 0, 0, 0);
$infoImage['0'] = 500;
$infoImage['1'] = 500;
}
// AFBEELDING DRAAIEN
$image = imagerotate($image, $this->imageRotate, imagecolorallocatealpha($image, 0, 0, 0, 127));
imagealphablending($image, false);
imagesavealpha($image, true);
// DOORSTUREN VAN BENODIGDE GEGEVENS
$this->showImage = $image;
$this->image_width = imagesx($image);
$this->image_height = imagesy($image);
}
/**************************************************\
WATERMERK CONTROLEREN
\**************************************************/
private function checkWatermark(){
// CONTROLEER AFBEELDING
$this->showImage = isset($this->showImage) ? $this->showImage : NULL;
if (!$this->showImage){ $this->checkImage(); }
// CONTROLEER PAD NAAR HET WATERMERK
$this->path_to_watermark = isset($this->path_to_watermark) ? $this->path_to_watermark : false;
if ($this->path_to_watermark){
// INFORMATIE VAN HET WATERMERK
$infoWatermark = getimagesize($this->path_to_watermark);
// JPG / JPEG
if ($infoWatermark['mime'] == 'image/jpeg'){
$watermark = @imagecreatefromjpeg($this->path_to_watermark);
} else
// PNG
if ($infoWatermark['mime'] == 'image/png'){
$watermark = @imagecreatefrompng($this->path_to_watermark);
} else
// GIF
if ($infoWatermark['mime'] == 'image/gif'){
$watermark = @imagecreatefromgif($this->path_to_watermark);
}
$bg = imagecolorallocatealpha($watermark, 0, 0, 0, 127);
imagefill($watermark, 0, 0 , $bg);
// AFBEELDING DRAAIEN
$watermark = imagerotate($watermark, $this->watermarkRotate, $bg);
imagealphablending($watermark, false);
imagesavealpha($watermark, true);
// BEREKENING OM HET WATERMERK IN HET MIDDEN VAN DE AFBEELDING TE PLAATSEN
$width = imagesx($watermark);
$height = imagesy($watermark);
// WATERMERK HORIZONTAAL POSITIONEREN
if ($this->watermarkHorizontalPosition == 'center'){
$center_x = ($this->image_width - $width) / 2;
} elseif ($this->watermarkHorizontalPosition == 'left'){
$center_x = 0;
} elseif ($this->watermarkHorizontalPosition == 'right'){
$center_x = $this->image_width - $width;
} else {
$center_x = round($this->watermarkHorizontalPosition);
if (($center_x + $width) > $this->image_width){
$center_x = $this->image_width - $width;
} elseif ($this->watermarkHorizontalPosition < 0){
$center_x = ($this->image_width - $width) + $this->watermarkHorizontalPosition;
if ($center_x < 0){ $center_x = 0; }
}
}
// WATERMERK VERTIKAAL POSITIONEREN
if ($this->watermarkVerticalPosition == 'center'){
$center_y = ($this->image_height - $height) / 2;
} elseif ($this->watermarkVerticalPosition == 'top'){
$center_y = 0;
} elseif ($this->watermarkVerticalPosition == 'bottom'){
$center_y = $this->image_height - $height;
} else {
$center_y = round($this->watermarkVerticalPosition);
if (($center_y + $width) > $this->image_height){
$center_y = $this->image_height - $width;
} elseif ($this->watermarkVerticalPosition < 0){
$center_y = ($this->image_height - $width) + $this->watermarkVerticalPosition;
if ($center_y < 0){ $center_y = 0; }
}
}
imagecopy($this->showImage, $watermark, $center_x, $center_y, 0, 0, $width, $height);
}
}
/**************************************************\
TEKST CONTROLEREN
\**************************************************/
private function checkText(){
// CONTROLEER AFBEELDING
$this->showImage = isset($this->showImage) ? $this->showImage : NULL;
if (!$this->showImage){ $this->checkImage(); }
// CONTROLEER TEKST
$this->text = isset($this->text) ? $this->text : false;
if ($this->text){
// MAAK ACHTERGROND
$box_width = $this->image_width;
$box_height = $this->font_size * 2;
$box = imagecreatetruecolor($box_width, $box_height);
$boxcolor = imagecolorallocatealpha($box, $this->background_color['red'], $this->background_color['green'], $this->background_color['blue'], 0);
imagefilledrectangle($box, 0, 0, $box_width, $box_height, $boxcolor);
// MAAK TEKST
$x_box = ($box_width / 2) - ((strlen($this->text) * $this->font_size) / 2.75);
$y_box = ($this->font_size * 1.5);
$textColor = imagecolorallocatealpha($box, $this->text_color['red'], $this->text_color['green'], $this->text_color['blue'], 0);
$font = 'BKANT.TTF'; // WIJZIG DE NAAM NAAR JOUW FONT-TYPE
imagefttext($box, $this->font_size, 0, $x_box, $y_box, $textColor, $font, $this->text);
// TEKST IN HET MIDDEN PLAATSEN
$center = ($this->image_height / 2) - ($box_height / 2);
imagecopy($this->showImage, $box, 0, $center, 0, 0, $box_width, $box_height);
}
}
/**************************************************\
OMZETTEN KLEUR VAN HEX NAAR DEC
\**************************************************/
private function hex2RGB($hexStr) {
// VERWIJDER ONNODIGE TEKENS
$hexStr = preg_replace("/[^0-9A-Fa-f]/", '', $hexStr);
$rgbArray = array();
// OMZETTEN VAN 6 TEKENS NAAR RGB
if (strlen($hexStr) == 6) {
$colorVal = hexdec($hexStr);
$rgbArray['red'] = 0xFF & ($colorVal >> 0x10);
$rgbArray['green'] = 0xFF & ($colorVal >> 0x8);
$rgbArray['blue'] = 0xFF & $colorVal;
} else
// OMZETTEN VAN 3 TEKENS NAAR RGB
if (strlen($hexStr) == 3) {
$rgbArray['red'] = hexdec(str_repeat(substr($hexStr, 0, 1), 2));
$rgbArray['green'] = hexdec(str_repeat(substr($hexStr, 1, 1), 2));
$rgbArray['blue'] = hexdec(str_repeat(substr($hexStr, 2, 1), 2));
} else
// ONGELDIG KLEURWAARDE
{
return false;
}
// TERUG STUREN VAN RGB
return $rgbArray;
}
/**************************************************\
TOON DE AFBEELDING
\**************************************************/
public function show_image(){
// CONTROLEER AFBEELDING
$this->showImage = isset($this->showImage) ? $this->showImage : NULL;
if (!$this->showImage){ $this->checkImage(); }
// AFBEELDING TONEN
header('Content-Type: image/png');
imagepng($this->showImage);
imagedestroy($this->showImage);
}
/**************************************************\
BEWAAR DE AFBEELDING
\**************************************************/
public function save_image($new_name = NULL, $save_to_folder = NULL, $show_image = false){
// CONTROLEER AFBEELDING
$this->showImage = isset($this->showImage) ? $this->showImage : NULL;
if (!$this->showImage){ $this->checkImage(); }
// CONTROLEER NAAM
if (!$new_name || strlen($new_name) < '1' || strlen($new_name) > '255'){
$new_name = time();
}
// CONTROLEER MAP
if (!$save_to_folder || strlen($save_to_folder) < 1){ $save_to_folder = '.'; }
$i = 0;
$checkName = $new_name;
// GEEF EEN NIEUWE NAAM ALS DE AFBEELDING AL BESTAAT
while (file_exists($save_to_folder.'/'.$new_name.'.png')){
$i++;
$new_name = $checkName.'_'.$i;
}
// AFBEELDING TONEN ?
if ($show_image === true){
header('Content-Type: image/png');
imagepng($this->showImage);
}
// BEWAREN
imagepng($this->showImage, $save_to_folder.'/'.$new_name.'.png');
imagedestroy($this->showImage);
}
}
}
?>
$img = new newImage;
// AFBEELDING TOEVOEGEN
$img->set_image('URL_NAAR_AFBEELDING.PNG/GIF/JPG', 0, KANTELEN);
KANTELEN: 0° tot 360°
// WATERMERK TOEVOEGEN
$img->set_watermark('URL_NAAR_WATERMERK.PNG/GIF/JPG', X, Y, 0, KANTELEN);
X: left, right, center, GETAL
GETAL: Het getal kan een positief of een negatief getal zijn.
Een positief getal wordt berekent van links naar rechts, negatief wordt berekent van rechts naar links.
Y: top, bottom, center, GETAL
GETAL: Het getal kan een positief of een negatief getal zijn.
Een positief getal wordt berekent van boven naar beneden, negatief wordt berekent van beneden naar boven.
KANTELEN: Idem als bij afbeelding
*** NIEUW ***
// TEKST TOEVOEGEN
$img->set_text('MIJN TEKST', 'TEKSTKLEUR', 'ACHTERGRONDKLEUR', 'TEKSTGROOTTE');
*** NIEUW ***
// KLEUR WISSELEN VAN DE AFBEELDING
$img->swap_color('OUDE_KLEUR', 'NIEUWE_KLEUR');
// TOON DE AFBEELDING
$img->show_image();
*** NIEUW ***
// AFBEELDING BEWAREN EN TONEN
$img->save_image('NAAM', 'MAP', true/false);
*** TOEKOMST GERICHT ***
- Afbeeldingen en tekst draaien
- Afbeeldingen en tekst transparant maken
- Horizontaal en verticaal positioneren van afbeeldingen en tekst
Wederom zijn jullie ideeën en gedachten welkom !!!
Gewijzigd op 09/09/2012 16:47:29 door G P
Toevoeging op 09/09/2012 14:30:12:
Ikzelf zou een class Watermerk en een class Image maken.
- Het draaien van afbeelding en van watermerk
- Het horizontaal en verticaal positioneren van het watermerk
- Raoul - op 09/09/2012 14:29:47:
Ik weet het, heb er al zelf een paar keren problemen mee gehad, 2x new achter elkaar is verwarrend. Een suggestie is dus welkom :)img of newImage zijn allebei geen correcte namen voor een class
- Raoul - op 09/09/2012 14:29:47:
Ik denk dat het ieder zijn goesting* is.Ikzelf zou een class Watermerk en een class Image maken.
Goesting* : Zin
Alleeh hé, goesting of nie, ik vin ut krek un goe idee ;-)
ut? krek? un? Nederlands dat versta ik nog, belgisch lukt ook wel maar mijn chinees is niet zo goed meer als vroeger...
Ut, is waarschijnlijk het en Un is dan wel een maar met krek heb ik geen flauw idee
Lol GP, krek is voor jou wat goesting is voor het grootste gedeelte van de Hollanders.
Ter info:
Krek is plat WZN-brabants en kan afhankelijk van de cotext waarin het gebruikt wordt verataald worden als 'echt wel', 'mijn kop eraf', etc.
Gewijzigd op 09/09/2012 17:43:46 door Ger van Steenderen
G P op 09/09/2012 16:11:45:
- Raoul - op 09/09/2012 14:29:47:
Ik weet het, heb er al zelf een paar keren problemen mee gehad, 2x new achter elkaar is verwarrend. Een suggestie is dus welkom :)img of newImage zijn allebei geen correcte namen voor een class
- Raoul - op 09/09/2012 14:29:47:
Ik denk dat het ieder zijn goesting* is.Ikzelf zou een class Watermerk en een class Image maken.
Daar ben ik het niet mee eens. Ieder zijn zin of niet, de manier waarop je OOP doet moet gewoon correct zijn.
Iedere klasse moet 1 bepaalde taak hebben, niet een image renderen en er een watermerk op tonen, dat zijn al 2 taken.
In OOP moet je ook denken in objecten, "newImage" is geen object. "Image" bijvoorbeeld wel.
In real life heb je toch ook geen object "nieuwe fiets", het woord "nieuwe" is een bijvoegelijk naamwoord dat hoort bij fiets. Het object is dus fiets.
Ik raad je dit eens aan om door te lezen: correcte klasse naamgeving
Gewijzigd op 09/09/2012 17:39:43 door - Raoul -