[GD] Transparantie watermark verdwijnt
Het uploaden en resizen werkt goed. Het watermerk wordt er opgezet, maar transparantie gaat verloren. Achtergrond wordt zwart met links en boven een witte border, geheel zwart of geheel wit.
Het vreemde is, dat wanneer ik een oud logo gebruik, de transparantie behouden blijft. Aan de afbeelding kan het niet liggen. Door diverse personen zijn er diverse testwatermerken gemaakt, waarin transparantie behouden blijft. Wanneer ik het watermerk/logo in een pagina met een achtergrondkleur zet, is te zien dat transparantie van het nieuwe logo goed is.
Het script:
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
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
<?php
move_uploaded_file($_FILES['file'.$i]['tmp_name'], $uploadimage);
move_uploaded_file($_FILES['file'.$i]['tmp_name'], $uploadimageTh);
# create image van geuploade screenshot
if ($extension=="jpg") {
$image = imagecreatefromjpeg($uploadimage);
} elseif ($type=="gif") {
$image = imagecreatefromgif($uploadimage);
} elseif ($type=="png") {
$image = imagecreatefrompng($uploadimage);
}
# breedte/hoogte screenshot bepalen
$width = imagesx($image);
$height = imagesy($image);
$imagefit = 640;
$imagefitTh = 80;
# resizen screenshot
if ($width>=$height&&$width>=$imagefit) {
$newheight = $height/$width*$imagefit;
$result = imagecreatetruecolor($imagefit, $newheight);
imagecopyresized($result, $image, 0, 0, 0, 0, $imagefit, $newheight, $width, $height);
}
if ($width<=$height&&$height>=$imagefit) {
$newwidth = $width/$height*$imagefit;
$result = imagecreatetruecolor($newwidth, $imagefit);
imagecopyresized($result, $image, 0, 0, 0, 0, $newwidth, $imagefit, $width, $height);
}
if ($width>=$height&&$width>=$imagefitTh) {
$newheight = $height/$width*$imagefitTh;
$resultTh = imagecreatetruecolor($imagefitTh, $newheight);
imagecopyresized($resultTh, $image, 0, 0, 0, 0, $imagefitTh, $newheight, $width, $height);
}
if ($width<=$height&&$height>=$imagefitTh) {
$newwidth = $width/$height*$imagefitTh;
$resultTh = imagecreatetruecolor($newwidth, $imagefitTh);
imagecopyresized($resultTh, $image, 0, 0, 0, 0, $newwidth, $imagefitTh, $width, $height);
}
# transparante watermerk creëren
$watermerk = imagecreatefrompng($path_watermerk);
$watermerk_width = imagesx($watermerk);
$watermerk_height = imagesy($watermerk);
imagecreatetruecolor($watermerk_width, $watermerk_height);
# image voorzien van watermerk
$size = getimagesize($uploadimage);
$xas = $size[0] - $watermerk_width - 5;
$yas = $size[1] - $watermerk_height - 5;
imagecopymerge($result, $watermerk, $xas, $yas, 0, 0, $watermerk_width, $watermerk_height, 100);
# nieuwe image uppen, tmp verwijderen
if ($result) {
chmod($uploadimage, 0777);
imagejpeg($result, $uploadimage, 100);
imagedestroy($result);
}
if ($resultTh) {
//chmod($uploadimageTh, 0777);
imagejpeg($resultTh, $uploadimageTh, 100);
imagedestroy($resultTh);
}
# aangemaakte images vernietigen
imagedestroy($image);
imagedestroy($watermerk);
?>
move_uploaded_file($_FILES['file'.$i]['tmp_name'], $uploadimage);
move_uploaded_file($_FILES['file'.$i]['tmp_name'], $uploadimageTh);
# create image van geuploade screenshot
if ($extension=="jpg") {
$image = imagecreatefromjpeg($uploadimage);
} elseif ($type=="gif") {
$image = imagecreatefromgif($uploadimage);
} elseif ($type=="png") {
$image = imagecreatefrompng($uploadimage);
}
# breedte/hoogte screenshot bepalen
$width = imagesx($image);
$height = imagesy($image);
$imagefit = 640;
$imagefitTh = 80;
# resizen screenshot
if ($width>=$height&&$width>=$imagefit) {
$newheight = $height/$width*$imagefit;
$result = imagecreatetruecolor($imagefit, $newheight);
imagecopyresized($result, $image, 0, 0, 0, 0, $imagefit, $newheight, $width, $height);
}
if ($width<=$height&&$height>=$imagefit) {
$newwidth = $width/$height*$imagefit;
$result = imagecreatetruecolor($newwidth, $imagefit);
imagecopyresized($result, $image, 0, 0, 0, 0, $newwidth, $imagefit, $width, $height);
}
if ($width>=$height&&$width>=$imagefitTh) {
$newheight = $height/$width*$imagefitTh;
$resultTh = imagecreatetruecolor($imagefitTh, $newheight);
imagecopyresized($resultTh, $image, 0, 0, 0, 0, $imagefitTh, $newheight, $width, $height);
}
if ($width<=$height&&$height>=$imagefitTh) {
$newwidth = $width/$height*$imagefitTh;
$resultTh = imagecreatetruecolor($newwidth, $imagefitTh);
imagecopyresized($resultTh, $image, 0, 0, 0, 0, $newwidth, $imagefitTh, $width, $height);
}
# transparante watermerk creëren
$watermerk = imagecreatefrompng($path_watermerk);
$watermerk_width = imagesx($watermerk);
$watermerk_height = imagesy($watermerk);
imagecreatetruecolor($watermerk_width, $watermerk_height);
# image voorzien van watermerk
$size = getimagesize($uploadimage);
$xas = $size[0] - $watermerk_width - 5;
$yas = $size[1] - $watermerk_height - 5;
imagecopymerge($result, $watermerk, $xas, $yas, 0, 0, $watermerk_width, $watermerk_height, 100);
# nieuwe image uppen, tmp verwijderen
if ($result) {
chmod($uploadimage, 0777);
imagejpeg($result, $uploadimage, 100);
imagedestroy($result);
}
if ($resultTh) {
//chmod($uploadimageTh, 0777);
imagejpeg($resultTh, $uploadimageTh, 100);
imagedestroy($resultTh);
}
# aangemaakte images vernietigen
imagedestroy($image);
imagedestroy($watermerk);
?>
Stukje dat dubbelop is met ...Th is om thumbnail aan te maken.
Er zijn enkele stukken uit de code weggelaten, voor de move-file functie. Deze hadden enkel betrekking tot het instellen van de naam van de afbeelding en de paden van de geüploade afbeelding en watermerk.
Iemand enig idee wat ik verkeerd doe?
Ik weet het niet zeker, maar volgens mij is dat een bug in de GD library. Ik heb wel eens vaker gelezen dat transparantie verloren gaat bij dit soort bewerkingen.
en klopt de extentie van je plaatje wel?
Oud logo:
http://img81.imageshack.us/img81/7616/28774079li0.jpg
Nieuw logo test watermerk:
http://img525.imageshack.us/img525/4981/88268575ah5.jpg
Is dit op een andere manier wel op te lossen, of ben ik genoodzaakt om een rechthoekig logo te gebruiken?
* img tags weggehaald ivm lange laadtijd imageshack.
Gewijzigd op 01/01/1970 01:00:00 door Vincent