Bonjour,
Une question pour les connaisseurs, j'ai développé un script qui redimensionne un PNG passé en paramètre et applique un fond transparent (Pour faire un détourage), puis affiche l'image. (En fait l'image est appelé depuis un site flash), j en'ai pas de problème vis à vis du PNG et IE, c'est pas ça le souci.
Donc en local (EasyPHP 1.8), cela fonctionne super bien. Par contre sur le serveur, j'ai une belle croix rouge (l'image ne s'affiche pas du tout).
J'ai fait un phpinfo() pour comparer GD j'ai pas noté de différence flagrante...
En local :
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
Serveur :
GD Support enabled
GD Version bundled (2.0.28 compatible)
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.1.7
T1Lib Support enabled
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled
Il y a un truc que je pige pas.
Mon script :
Exemple d'appel : miniature.php?img=monimage.png&w_max=200&h_max=100
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 if (isset($img)) { if (!isset($w_max)) { $w_max = 100; } if (!isset($h_max)) { $h_max = 75; } if (!isset($save)) { $save = 0; } $taille = getimagesize($img); $h_i = $taille[1]; $w_i = $taille[0]; if($h_i >$h_max) { $convert=$h_max/$h_i; $h_i=$h_max; $w_i=ceil($w_i*$convert); } if($w_i >$w_max) { $convert=$w_max/$w_i; $w_i=$w_max; $h_i=ceil($h_i*$convert); } ; $img_in = imagecreatefrompng($img); //$img_in = imagecreatefromjpeg($img); $img_out = imagecreatetruecolor($w_max, $h_max); $rgb = imagecolorat($img_in, 1, 1); $pixel = imagecolorsforindex($img_in, $rgb); imagefill ($img_out, 0, 0, $rgb); $decal_gauche = ceil(($w_max - $w_i) / 2); $decal_haut = ceil(($h_max - $h_i) / 2); imagecopyresampled($img_out, $img_in, $decal_gauche, $decal_haut, 0, 0, $w_i, $h_i, imagesx($img_in), imagesy($img_in)); imagetruecolortopalette($img_out, false, 256); // convert $trans_color = imagecolorresolve( $img_out, $pixel[red], $pixel[green], $pixel[blue]); imagecolortransparent ( $img_out, $trans_color ); //header('Last-Modified: '.gmdate('D, d M Y H:i:s', $timestamp).' GMT'); header("Content-Type: image/png"); imagepng($img_out,"",100); } else { exit(); }
On prend l'image, on la redimensionne proportionnellement, on prend la coourleur du premier pixel pour la mettre en transparent puis on affiche.
Merci d'avance.
Partager