par
Vianney » 17 janv. 2006, 16:07
En fait le truc c'est que j'avais pas compris c'est que toutes ces fonctions créez des images dans le cache du serveur et permettent ainsi de créer des images dynamiques en php...
Un exemple courant d'utilisation c'est la création de miniature. On ne crée pas une nouvelle miniature pour chaque image. Elle est recrée dans le cache de php a chaque fois et détruite en fin de script.
Moi je souhais modifier définitivement un fichier.
Voila donc ce que je fais.
upload.phpif (!copy('http://mailtank:8080/ben/resize.php?path='.$dest_folder.$dest_file,$dest_folder.$dest_file)) {
echo '<div id="contenu"><p>Upload has failed while resizing your photo. Contact your administrator.</p></div>';
header("Refresh: 2; URL=index.php?p=_myoption");
exit();
}
else {
echo '<div id="contenu"><p>Photo uploaded successfully. You will be redirected within 2 seconds.</p></div>';
header("Refresh: 2; URL=index.php?p=_myoption");
exit();
}
J'utilise la fonction copy dans laquelle j'appel une autre page que j'ai appelé "resize.php" avec en argument le fichier a modifier.
resize.php<?php
if(!empty($_GET['path']) && file_exists($_GET['path'])) {
$filename = $_GET['path'];
// Content type
header('Content-type: image/jpeg');
// Calculate the new dimensions
list($width, $height, $type) = getimagesize($filename);
$new_height = 70;
$percent = $new_height / $height;
$new_width = $width * $percent;
switch($type)
{
case '1':
// resize
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromgif($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// display
imagegif($image_p, null, 100);
break;
case '2':
// resize
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// display
imagejpeg($image_p, null, 100);
break;
case '3';
// resize
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefrompng($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// display
imagepng($image_p, null, 100);
break;
}
}
?>
La page resize.php renvoie a la fonction copy une image redimensionner et proportionnelle a la taille de départ. Remplace l'ancienne image par la nouvelle.
Cette vieille feinte du loup marche pour les fichiers jpg, gif et png.
Néanmoins, j'ai des problemes car le transparence des png devient noir apres le resamplage...
Et je n'ai pas trouvé de maniere de traiter les bmp.
Des idées?
En fait le truc c'est que j'avais pas compris c'est que toutes ces fonctions créez des images dans le cache du serveur et permettent ainsi de créer des images dynamiques en php...
Un exemple courant d'utilisation c'est la création de miniature. On ne crée pas une nouvelle miniature pour chaque image. Elle est recrée dans le cache de php a chaque fois et détruite en fin de script.
Moi je souhais modifier définitivement un fichier.
Voila donc ce que je fais.
[b]upload.php[/b][php]if (!copy('http://mailtank:8080/ben/resize.php?path='.$dest_folder.$dest_file,$dest_folder.$dest_file)) {
echo '<div id="contenu"><p>Upload has failed while resizing your photo. Contact your administrator.</p></div>';
header("Refresh: 2; URL=index.php?p=_myoption");
exit();
}
else {
echo '<div id="contenu"><p>Photo uploaded successfully. You will be redirected within 2 seconds.</p></div>';
header("Refresh: 2; URL=index.php?p=_myoption");
exit();
}[/php]
J'utilise la fonction copy dans laquelle j'appel une autre page que j'ai appelé "resize.php" avec en argument le fichier a modifier.
[b]resize.php[/b][php]<?php
if(!empty($_GET['path']) && file_exists($_GET['path'])) {
$filename = $_GET['path'];
// Content type
header('Content-type: image/jpeg');
// Calculate the new dimensions
list($width, $height, $type) = getimagesize($filename);
$new_height = 70;
$percent = $new_height / $height;
$new_width = $width * $percent;
switch($type)
{
case '1':
// resize
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromgif($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// display
imagegif($image_p, null, 100);
break;
case '2':
// resize
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// display
imagejpeg($image_p, null, 100);
break;
case '3';
// resize
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefrompng($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// display
imagepng($image_p, null, 100);
break;
}
}
?>[/php]
La page resize.php renvoie a la fonction copy une image redimensionner et proportionnelle a la taille de départ. Remplace l'ancienne image par la nouvelle.
Cette vieille feinte du loup marche pour les fichiers jpg, gif et png.
Néanmoins, j'ai des problemes car le transparence des png devient noir apres le resamplage...
Et je n'ai pas trouvé de maniere de traiter les bmp.
Des idées?