et merci pour ta patience. Après deux trois recherche je suis arrivé à la même conclusion que toi
Merci pour tout.
Oui et j'ai oublié de préciser que la mémoire nécessaire pour un redimensionnement dépend à la fois de la résolution de l'image source et de la résolution de l'image cible.Re saljut AB,
et merci pour ta patience. Après deux trois recherche je suis arrivé à la même conclusion que toi. Il faut que je booste mon forfait sur 1and1 ou bien prendre un serveur dédié. La valeur max pour "memory_limit" est 32M sur 1and1. La dimension max que je peux utiliser est de 1280x1024.
Merci pour tout.
<?php
header('Content-Type: text/plain');
ini_set('memory_limit', '128M');
function format_size($size) {
if ($size < 1024) {
return $size . ' bytes';
}
else {
$size = round($size / 1024, 2);
$suffix = 'KB';
if ($size >= 1024) {
$size = round($size / 1024, 2);
$suffix = 'MB';
}
return $size . ' ' . $suffix;
}
}
$start_mem = memory_get_usage();
echo "\n\n";
echo 'Memoire disponible : ' . ini_get('memory_limit') . "\n";
echo 'Memory Usage initial : ' . format_size($start_mem) . "\n";
// Indiquez une image jpg valide (sur le serveur d'évaluation)
$image = 'repertoire/ma_photo.jpg';
echo "\n";
$info = getimagesize($image);
$im = imagecreatefromjpeg($image);
$mem = memory_get_usage();
echo 'Memory usage: ' . format_size($mem) . "\n";
echo 'imagecreatefromjpeg necessaire: ' . format_size($mem - $start_mem) . "\n\n";
// Indiquez des dimensions pour l'image de destination
$largeur_destination = '1280';
$hauteur_destination = '1024';
$ressource = @imagecreatetruecolor ($largeur_destination, $hauteur_destination);
$mem2 = memory_get_usage();
echo 'Memory usage: ' . format_size($mem2) . "\n";
echo 'imagecreatetruecolor necessaire: ' . format_size($mem2 - $mem) . "\n\n";
echo 'Total necessaire : ' . format_size($mem2 - $start_mem) . "\n";
?>
Heu... t'a testé avec le bout de script que je viens de donner dans le message précédent et qui mesure la mémoire effective utilisée ? Dans la pratique on est très très loin de tes calculs théoriques...quand on manipule les images tout est convertie en brute donc recompresser, avec 4 canaux RGBA de 32bits chaqu'un, ce qui fait 128 bits donc 16 octets par pixel, ensuite il suffis de multiplier, par le nombre, une image de 1024 x 768 fera théoriquement 12mo, pour une image d'un appareil classique genre 10 megapixels, on arrive a 140mo pour une image de 3840 × 2400
Oui c'est pour ca que c'est de la théorie, brute et seule une image prendra cette taille en mémoire. j'ai jamais dit que que c'était la taille pris par GD lorsque qu'il ouvre une image. Faut plus considérer ca comme la taille minimal que peu prendre une image décompressé.Heu... t'a testé avec le bout de script que je viens de donner dans le message précédent et qui mesure la mémoire effective utilisée ? Dans la pratique on est très très loin de tes calculs théoriques...quand on manipule les images tout est convertie en brute donc recompresser, avec 4 canaux RGBA de 32bits chaqu'un, ce qui fait 128 bits donc 16 octets par pixel, ensuite il suffis de multiplier, par le nombre, une image de 1024 x 768 fera théoriquement 12mo, pour une image d'un appareil classique genre 10 megapixels, on arrive a 140mo pour une image de 3840 × 2400
Mais je vois toujours pas l'intérêt de ton calcul pour le problème qui m'intéresse. Avec 64 Mo on peut normalement redimensionner avec GD des fichiers jpg de 10 Mega pixels pour peu que la résolution cible ne soit pas très importante, et tu me dis qu'on arrive à 140mo pour une image de 3840 × 2400 en décompressé. Mais à quoi ça peut bien me servir ?Oui c'est pour ca que c'est de la théorie, brute et seule une image prendra cette taille en mémoire. j'ai jamais dit que que c'était la taille pris par GD lorsque qu'il ouvre une image. Faut plus considérer ca comme la taille minimal que peu prendre une image décompressé.
Oui bon merci, je te fais pas remarquer toutes tes fautes de frappes sinon j'en finirais pasc'est pas 10Mo pixels, mais 10megapixel,
C'est pas ce que mesurent les tests, c'est plutôt entre 45 - 50 MoGD la décompresse et met tout en mémoire donc si t'ouvres une image de 10Mo de taille qui correspond a un jpeg d'une image de 10megapixel donc du 3840 × 2400, la consommation de mémoire va être au minium de 140Mo
Merci de me le rappeler mais je croyais avoir été assez clair :tout ca pour dire que la consommation de mémoire ne dépend pas du poids du fichier mais la la résolution de l'image.
2/ Concernant le redimensionnement
La capacité de redimensionnement est indépendante du poids du fichier et dépend uniquement de la résolution de l'image. C'est à dire qu'un fichier de 500ko pourra ne pas être redimensionné s'il a une très grande résolution. Cette limitation vient du paramètre serveur "memory_limit" car le redimensionnement utilise d'autant plus de mémoire que la résolution du fichier est importante...
140mo c'etait dans l'hypothèse où GD travaillerai en 32bit mais c'est pas le cas, comme il est en 8bit, c'est 35mo + l'image dans un format interne (puisqu'il faut bien récupérer les pixels en 32bit a un moment)C'est pas ce que mesurent les tests, c'est plutôt entre 45 - 50 MoGD la décompresse et met tout en mémoire donc si t'ouvres une image de 10Mo de taille qui correspond a un jpeg d'une image de 10megapixel donc du 3840 × 2400, la consommation de mémoire va être au minium de 140Mo
$form2_photo->Set_Renomme_fichier ('incr');
$nom_fichier = isset($_POST['mavaleur']) ? $_POST['mavaleur'] : 'nom_par_defaut';
$form2_photo->Set_Nomme_fichier ($nom_fichier,'ext_fichier_telecharge');
donc 'nom_par_defaut' ne sera jamais utilisé mais cela donne juste à la classe un argument valide à tester en attendant la valeur du $_POST; <?php
// Lecture du tableau des résultats (se trouve ici uniquement pour la démonstration et visualiser la structue des tableaux de résultat)
if (!empty ($tranfert_form1))
{
$identifant = $tranfert_form1['identifiant'];
$champ = $tranfert_form1['champ'];
$resultat = $tranfert_form1['resultat'];//tableau à trois dimensions
echo $identifant.' :<br /><br />';
foreach ($resultat as $num => $rep)
{
foreach ($rep as $key => $value)
{
if(!empty($value['nom']))
echo 'champ '.$champ.' n° '.$num.' = '.$value['nom'].' '. $value['dim'].', téléchargé dans "'.$key.'"<br />';
}
}
} ?>
Pour mettre les noms de fichiers téléchargés dans un formulaire il suffit d'écrire à l'intérieur du formulaire :<?php
if (!empty ($tranfert_form1))
{
//$identifant = $tranfert_form1['identifiant'];
//$champ = $tranfert_form1['champ'];
$resultat = $tranfert_form1['resultat'];//tableau à trois dimensions
//echo $identifant.' :<br /><br />';
foreach ($resultat as $num => $rep)
{
foreach ($rep as $key => $value)
{
if(!empty($value['nom']))
echo '<input type = "text" name = "fichier_telecharge[]" value = " '.$value['nom'].'" />';
}
}
} ?>
Encore merciOui bon merci, je te fais pas remarquer toutes tes fautes de frappes sinon j'en finirais pasc'est pas 10Mo pixels, mais 10megapixel,![]()
C'est pas ce que mesurent les tests, c'est plutôt entre 45 - 50 MoGD la décompresse et met tout en mémoire donc si t'ouvres une image de 10Mo de taille qui correspond a un jpeg d'une image de 10megapixel donc du 3840 × 2400, la consommation de mémoire va être au minium de 140Mo
Merci de me le rappeler mais je croyais avoir été assez clair :tout ca pour dire que la consommation de mémoire ne dépend pas du poids du fichier mais la la résolution de l'image.2/ Concernant le redimensionnement
La capacité de redimensionnement est indépendante du poids du fichier et dépend uniquement de la résolution de l'image. C'est à dire qu'un fichier de 500ko pourra ne pas être redimensionné s'il a une très grande résolution. Cette limitation vient du paramètre serveur "memory_limit" car le redimensionnement utilise d'autant plus de mémoire que la résolution du fichier est importante...