watermark
ik ben bezig met een watermark op afbeeldingen te plaatsen. Dit lukt goed, enkel vervormd het soms door de grootte van de afbeeldingen.
Nu zou ik willen dat ik enkel aan de afbeeldingen een width meegeef.
Van zodra ik maar 1 variable meegeef, geeft dit een foutmelding. Hoe los ik dit het beste op?
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
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
// function die de image verkleint/vergroot en naar een specifieke locatie kopieert.
class image_watermark
{
// function die een afbeelding inlaad als image
function set_image($filename)
{
if (file_exists($filename))
{
$image_info = getimagesize($filename);
switch ($image_info["mime"])
{
case "image/jpeg" : $this->image = imagecreatefromjpeg($filename); break;
case "image/png" : $this->image = imagecreatefrompng($filename); break;
case "image/gif" : $this->image = imagecreatefromgif($filename); break;
default : echo "Error: Er is geen jpeg, png of gif afbeelding gebruikt!"; end; break;
}
}
else
{
echo "error: " . $filename . " does not exist!";
end;
}
}
// function die een afbeelding inlaad als watermark
function set_watermark($filename)
{
if (file_exists($filename))
{
$image_info = getimagesize($filename);
switch ($image_info["mime"])
{
case "image/jpeg" : $this->watermark = imagecreatefromjpeg($filename); break;
case "image/png" : $this->watermark = imagecreatefrompng($filename); break;
case "image/gif" : $this->watermark = imagecreatefromgif($filename); break;
default : echo "Error: Er is geen jpeg, png of gif afbeelding gebruikt!"; end; break;
}
}
else
{
echo "error: " . $filename . " does not exist!";
end;
}
}
// function die de image verkleint/vergroot en naar een specifieke locatie kopieert.
function push($destination, $width, $height, $options)
{
if($width==0) {$width=imagesx($this->image); $height=imagesy($this->image); }
$image = imagecreatetruecolor($width, $height);
imagecopyresampled($image, $this->image, 0, 0, 0, 0, $width, $height, imagesx($this->image), imagesy($this->image));
if($options["watermark"]==true)
{
$percentage = imagesx($this->watermark) / $width;
$watermark_width = imagesx($this->watermark) / $percentage;
$watermark_height = imagesy($this->watermark) / $percentage;
$watermark_top = $options["top"] - ($watermark_height / 2);
$watermark = imagecreatetruecolor($watermark_width, $watermark_height);
imagecopyresampled($watermark, $this->watermark, 0, 0, 0, 0, $watermark_width, $watermark_height, imagesx($this->watermark), imagesy($this->watermark));
$transparant = imagecolorallocate($watermark, 255, 0, 255); // Een kleurtje kiezen welke we transparant gaan maken
imagefill($watermark, 0, 0, $transparant); // De afbeelding volgieten met deze kleur
imagecolortransparent($watermark, $transparant); // Aangeven dat we onze gekozen kleur als transparant willen zien
// sterke/zichtbaar van het watermerk kun je hieronder instellen,het laatste getal geeft het aan in procenten 100 = volledig zichtbaar, 0 = onzichtbaar
imagecopymerge ($image, $watermark, 0, $watermark_top, 0, 0, $watermark_width, $watermark_height,80);
}
imagejpeg ($image, $destination);
}
}
// class aanroepen
$watermark = new image_watermark;
// afbeelding en watermerk inladen, let erbij op dat het watermerk de kleur #FF00FF als achtergrond heeft.
// let er ook op dat de afbeelding geen anti-aliasing gebruik, hierbij neemt een object een deel van de kleur van zijn achtergrond over,
// waardoor er bij de mengin ook een kleur word getoond en dit resulteerd in lelijke effecten.
$file = $_FILES;
if($_FILES['foto']['name'])
{
$watermark->set_image($file[foto][tmp_name]);
$watermark->set_watermark("../../temp/water.png");
$pushname = $bevestig . md5(time()+1) . ".jpg";
$watermark->push("../../pics/" . $pushname, $width, $height, array("watermark" => true, "top" => "20"));
$watermark->push("../../tumbs/" . $pushname, $width, $height, array("watermark" => true, "top" => "20"));
}
?>
// function die de image verkleint/vergroot en naar een specifieke locatie kopieert.
class image_watermark
{
// function die een afbeelding inlaad als image
function set_image($filename)
{
if (file_exists($filename))
{
$image_info = getimagesize($filename);
switch ($image_info["mime"])
{
case "image/jpeg" : $this->image = imagecreatefromjpeg($filename); break;
case "image/png" : $this->image = imagecreatefrompng($filename); break;
case "image/gif" : $this->image = imagecreatefromgif($filename); break;
default : echo "Error: Er is geen jpeg, png of gif afbeelding gebruikt!"; end; break;
}
}
else
{
echo "error: " . $filename . " does not exist!";
end;
}
}
// function die een afbeelding inlaad als watermark
function set_watermark($filename)
{
if (file_exists($filename))
{
$image_info = getimagesize($filename);
switch ($image_info["mime"])
{
case "image/jpeg" : $this->watermark = imagecreatefromjpeg($filename); break;
case "image/png" : $this->watermark = imagecreatefrompng($filename); break;
case "image/gif" : $this->watermark = imagecreatefromgif($filename); break;
default : echo "Error: Er is geen jpeg, png of gif afbeelding gebruikt!"; end; break;
}
}
else
{
echo "error: " . $filename . " does not exist!";
end;
}
}
// function die de image verkleint/vergroot en naar een specifieke locatie kopieert.
function push($destination, $width, $height, $options)
{
if($width==0) {$width=imagesx($this->image); $height=imagesy($this->image); }
$image = imagecreatetruecolor($width, $height);
imagecopyresampled($image, $this->image, 0, 0, 0, 0, $width, $height, imagesx($this->image), imagesy($this->image));
if($options["watermark"]==true)
{
$percentage = imagesx($this->watermark) / $width;
$watermark_width = imagesx($this->watermark) / $percentage;
$watermark_height = imagesy($this->watermark) / $percentage;
$watermark_top = $options["top"] - ($watermark_height / 2);
$watermark = imagecreatetruecolor($watermark_width, $watermark_height);
imagecopyresampled($watermark, $this->watermark, 0, 0, 0, 0, $watermark_width, $watermark_height, imagesx($this->watermark), imagesy($this->watermark));
$transparant = imagecolorallocate($watermark, 255, 0, 255); // Een kleurtje kiezen welke we transparant gaan maken
imagefill($watermark, 0, 0, $transparant); // De afbeelding volgieten met deze kleur
imagecolortransparent($watermark, $transparant); // Aangeven dat we onze gekozen kleur als transparant willen zien
// sterke/zichtbaar van het watermerk kun je hieronder instellen,het laatste getal geeft het aan in procenten 100 = volledig zichtbaar, 0 = onzichtbaar
imagecopymerge ($image, $watermark, 0, $watermark_top, 0, 0, $watermark_width, $watermark_height,80);
}
imagejpeg ($image, $destination);
}
}
// class aanroepen
$watermark = new image_watermark;
// afbeelding en watermerk inladen, let erbij op dat het watermerk de kleur #FF00FF als achtergrond heeft.
// let er ook op dat de afbeelding geen anti-aliasing gebruik, hierbij neemt een object een deel van de kleur van zijn achtergrond over,
// waardoor er bij de mengin ook een kleur word getoond en dit resulteerd in lelijke effecten.
$file = $_FILES;
if($_FILES['foto']['name'])
{
$watermark->set_image($file[foto][tmp_name]);
$watermark->set_watermark("../../temp/water.png");
$pushname = $bevestig . md5(time()+1) . ".jpg";
$watermark->push("../../pics/" . $pushname, $width, $height, array("watermark" => true, "top" => "20"));
$watermark->push("../../tumbs/" . $pushname, $width, $height, array("watermark" => true, "top" => "20"));
}
?>
Reshad F op 25/01/2014 15:31:32:
Dit geeft geen verandering. De foto blijft de ware grootte behouden van de upload.
//src_w en src_h maak je dan als property ipv van telkens opvragen met imagesx/y()
Wat ik bedoel dat je herhaaldelijk gebruik maakt van dezelfde functies nl. imagesx en imagesy.
Het is makkelijker om dit in een property van je object op te slaan, bijv in de functie set_image().
En dan nog even dit:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$watermark = new image_watermark()
$waternark->set_image($_FILES['foto']['tmp_name'], $_files['foto']['name']);
$watermark->image = 'haha gefopt';
$watermark->push("../../pics/" . $pushname, $width, $height, array("watermark" => true, "top" => "20"));
?>
$watermark = new image_watermark()
$waternark->set_image($_FILES['foto']['tmp_name'], $_files['foto']['name']);
$watermark->image = 'haha gefopt';
$watermark->push("../../pics/" . $pushname, $width, $height, array("watermark" => true, "top" => "20"));
?>
Je hebt de property image van object niet vooraf gedeclareerd maar maakt hem on the fly aan, en daarmee is ie altijd public, dus kan ik er buiten de class om mee doen wat ik wil.
Gewijzigd op 25/01/2014 20:50:10 door Ger van Steenderen