[PHP] Uploaden transparante GIF wordt zwart

Pagina: 1
Acties:
  • 102 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Topicstarter
Hallo,

Probleem
Het uploaden én verkleinen van een transparante GIF afbeelding gaat mis; alles wat transparant is wordt zwart. PNG afbeeldingen gaan wel goed. Het gekke is, op een andere server werkt het wel, terwijl ik geen verschil in versies kan ontdekken.

Uiteraard gezocht in de manual, op Google en hier. De code die ik gebruik lijkt mij goed, aangezien deze op de ene server wel werkt, maar op de andere niet.

De 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
<?php
if (isset($_FILES['alphaImage']['error']) && $_FILES['alphaImage']['error'] == 0) {

    /* Vars */
    $src = $_FILES['alphaImage']['tmp_name'];
    $dst = $_SERVER['DOCUMENT_ROOT'].'/delta-automatisering/beheer/afbeeldingen/'.$_FILES['alphaImage']['name'];


    /* Get image info */
    $im_type = getimagesize($src);
    $im_mime = image_type_to_mime_type($im_type[2]);


    /* Switch mime-type */
    switch( $im_mime )
    {
        case 'image/gif':
            $im_src = imagecreatefromgif($src);
            $colorTransparent = imagecolortransparent($im_src);
            $im = imagecreatetruecolor(200, 200);
            imagepalettecopy($im, $im_src);
            imagefill($im, 0, 0, $colorTransparent);
            imagecolortransparent($im, $colorTransparent);
            imagealphablending($im, false);
            imagecopyresized($im, $im_src, 0, 0, 0, 0, 200, 200, imagesx($im_src), imagesy($im_src));

            imagegif($im, $dst, 99);
            break;

        case 'image/jpeg':
        case 'image/pjpeg':
            $im_src = imagecreatefromjpeg($src);
            $im = imagecreatetruecolor(200, 200);

            imagecopyresized($im, $im_src, 0, 0, 0, 0, 200, 200, imagesx($im_src), imagesy($im_src));
            
            imagejpeg($im, $dst, 99);
            break;

        case 'image/png':
            $im_src = imagecreatefrompng($src);
            $im = imagecreatetruecolor(200, 200);
            imagealphablending($im, FALSE);
            imagesavealpha($im, TRUE);

            imagecopyresized($im, $im_src, 0, 0, 0, 0, 200, 200, imagesx($im_src), imagesy($im_src));
            
            imagepng($im, $dst, 99);
            break;

        default:
            return false;
            break;
    }
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<title>Upload met behoud van alpha bij GIF</title>
</head>
<body style="background:#CCFFCC;">

<p>Selecteer nieuwe GIF afbeelding:</p>
<form action="alphaupload_.php" name="alpha" method="post" enctype="multipart/form-data">
<input type="file" name="alphaImage"> <input type="submit" value="Upload">
</form>

<p>Huidige afbeelding:</p>

[img]"<?=$_FILES['alphaImage']['name'];?>">

</body>
</html[/img]


De servers

Waar het wel werkt: Linux (volgens mij Debian)
Configure Command:
'./configure' '--with-apxs' '--with-curl' '--with-curl-dir=/usr/local/lib' '--with-gd' '--with-gd-dir=/usr/local/lib' '--with-gettext' '--with-jpeg-dir=/usr/local/lib' [...]
GD
GD Support enabled
GD Version bundled (2.0.28 compatible)
FreeType Support enabled
FreeType Linkage with freetype
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled
Waar het niet werkt: Linux (FedoraCore dacht ik)
Configure Command:
[...] '--with-png-dir=/usr' '--with-gd=shared' '--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-ncurses=shared' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-png' [...]
GD
GD Support enabled
GD Version bundled (2.0.28 compatible)
FreeType Support enabled
FreeType Linkage with freetype
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled
Ideeën?
Ik zou eigenlijk niet weten waar het aan kan liggen, het uploaden van transparante PNGs gaat altijd goed. Transparante GIFs werken dus op de ene server wel, op de andere wordt het zwart. Daarom denk ik dat het toch aan de servers ligt, maar ik zie geen verschillen waarvan ik denk dat dat het probleem kan zijn.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Hmm, vreemd. In de manual kan ik er eigenlijk alleen dit over vinden:
Note: Transparency is copied only with imagecopymerge() and true color images, not with imagecopy() or pallete images.
Maar dat zou betekenen dat het op beide servers niet kan/mag werken.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Topicstarter
-NMe- schreef op dinsdag 30 mei 2006 @ 14:05:
Hmm, vreemd. In de manual kan ik er eigenlijk alleen dit over vinden:

[...]

Maar dat zou betekenen dat het op beide servers niet kan/mag werken.
Ja, ik vond het opzich ook wel vreemd. Hier nog even de afbeelding die ik (als test) probeer te uploaden, en het resultaat op de ene en op de andere server:

GIF
Afbeeldingslocatie: http://azwart.nl/tmp/got/gif.gif

Resultaat
Afbeeldingslocatie: http://azwart.nl/tmp/got/resultaat.jpg

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
offtopic:
Het is me op GoT ook al regelmatig opgevallen in mijn fotoalbum bij het uploaden van foto's. De thumbs zijn dan (soms) zwart. Het gekke is dat een tweede (of soms derde) keer uploaden het wél goed gaat (zelfde bestand). Misschien hetzelfde probleem?

Heb het toen overigens ook gemeld en moto-moi heeft het toen opgelost?

[ Voor 23% gewijzigd door RobIII op 30-05-2006 19:09 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Topicstarter
Ik heb helaas geen toegang tot dat deel van het forum. ;(

-- edit --

Wat was eigenlijk de oorzaak? Of is dat niet duidelijk? :)

[ Voor 48% gewijzigd door OkkE op 31-05-2006 08:51 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
OkkE schreef op woensdag 31 mei 2006 @ 08:39:
Wat was eigenlijk de oorzaak? Of is dat niet duidelijk? :)
moto-moi schreef op vrijdag 11 maart 2005 @ 13:33:
Zou nu weer wel moeten werken :)
And if not, je weet ons te vinden :)
Onduidelijk dus ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Topicstarter
Hmm, balen.. Ik heb btw nog getest, maar het lijkt er op dat het hier altijd fout gaat. Dus dan zal het waarschijnlijk toch niet helemaal het zelfde probleem zijn. Jammer. :(

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.

Pagina: 1