Problemen met uploaden van PNG images

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Vincent

Vincent

18/04/2008 11:47:00
Quote Anchor link
Ola.
Heb weer eens een probleempje.
Ik heb een upload functie voor images. Deze werkt voor 2/3e goed. JPG en GIF files worden prima geupload (en geresized). PNG files resulteren in een 33 byte PNG file die vervolgens niet getoond kan worden.

De code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
# ...stukje weggelaten met extensie check en move_uploaded_file...

# image aanmaken 1/4

if ($extension == 'jpg') {
    $image = imagecreatefromjpeg($uploadDir.$name.'.'.$extension);
}
elseif ($extension == 'gif') {
    $image = imagecreatefromgif($uploadDir.$name.'.'.$extension);
}
elseif ($extension == 'png') {
    $image = imagecreatefrompng($uploadDir.$name.'.'.$extension);
}

# ratio's berekenen
$width = imagesx($image);
$height = imagesy($image);
if ($width < $dst_width ) {
    $dst_width = $width;
}

$ratio_x = $width / $dst_width;
$dst_width = round($width / $ratio_x);
$dst_height = round($height / $ratio_x);
# image aanmaken 2/4
if (in_array($extension, array('jpg','jpeg','png'))) {
    $dst_img = imagecreatetruecolor($dst_width, $dst_height);
}
else {
    $dst_img = imagecreate($dst_width, $dst_height);
}

# image aanmaken 3/4
$result = imagecopyresampled($dst_img, $image, 0, 0, 0, 0, $dst_width, $dst_height, $width, $height);
# image aanmaken 4/4
if ($extension == 'jpg') {
    $result = imagejpeg($dst_img, $uploadDir.$name.'.'.$extension, $quality);
}
elseif ($extension == 'gif') {
    $result = imagegif($dst_img, $uploadDir.$name.'.'.$extension, $quality);
}
elseif ($extension == 'png') {
    $result = imagepng($dst_img, $uploadDir.$name.'.'.$extension, $quality);
}

# thumb chmodden
chmod($uploadDir.$name.'.'.$extension, 0755);
# image voor thumb verwijderen
imagedestroy($dst_img);
if ($result == FALSE) {
    $error .= '- Image aanmaken is niet gelukt. <br />';
}

?>


Hij doorloopt de stappen goed. Als ik een PNG upload, komt ie in de statements voor PNG file. Zal toch wel ergens iets fout gaan, waardoor ie geen goede PNG image maakt.

---

Edit: Gif heeft geen 3de argument, is er uitgehaald. PNG heeft kwaliteitsargument van 0 tot 9. Als ik die op 9 zet verdwijnt transparantie.

--

Edit 2: Transparantiebehoud is me dan ook eindelijk gelukt met twee extra functies om imagecopyresampled heen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
# voor transparantiebehoud 1/2
if ($extension == 'png') {
    imagealphablending($dst_img, false);
}

# image aanmaken 3/4
$result = imagecopyresampled($dst_img, $image, 0, 0, 0, 0, $dst_width, $dst_height, $width, $height);
# voor transparantiebehoud 2/2
if ($extension == 'png') {
    imagesavealpha($dst_img, true);
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Vincent
 
Er zijn nog geen reacties op dit bericht.



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.