[PHP] Ouvrir et modifier une série de fichiers jpg

Ouvrir et modifier une série de fichiers jpg [PHP] - PHP - Programmation

Marsh Posté le 06-06-2007 à 14:19:37    

Bonjour à tous !
 
J'ai sur mon site environ 1000 dossiers contenant chacun une dizaine d'images. Ces images ont pour l'instant une taille de max. 800 pixels de côté. J'aimerais que ces images fassent maintenant chacune 640 pixels de côté. J'ai un script qui redimensionne toute image uploadée, de ce côté je n'ai pas de soucis mais je rame un peu au niveau de l'ouverture et de l'écriture de fichiers.  
 
Comment dois-je procéder ? Je préfère éviter le système de lecture dans chaque dossier, un peu barbare car toutes les photos ne devraient pas être modifiées. Dans ma BD j'ai tout ce qu'il faut pour retrouver un chemin d'accès pour telle ou telle photo, et ce que j'aimerais avoir c'est une fonction à laquelle je puisse dire de modifier la photo 6072 par exemple.  
 
Voilà où j'en suis :
 

Code :
  1. $req=$bd->req_exe("select * from tofs, users, galerie where id=8434 and galerie=idgal and photographe=iduser" );
  2.  $data=$bd->objetsuiv($req);
  3.  $name="ftp://ftp.shootmeagain.com/photo/1051/small/flatcat-0106.jpg";
  4.  $file = fopen($name,'r+');
  5.  $resized=resize($name,$name."2",600,600,"",$data->disclaimer,$data->login);


 

Code :
  1. <?php
  2. function resize($file, $tofname, $maxWidth, $maxHeight, $path, $disclaimer, $user=0)
  3. {
  4.  
  5. ini_set("memory_limit","32M" );
  6. ini_set("max_execution_time","300" );
  7. $prod=$maxWidth*$maxHeight;
  8. //Créé une image à partir de $file
  9. $img = ImageCreateFromJpeg($file);
  10. //Dimensions de l'image
  11. $imgWidth = imagesx($img);
  12. $imgHeight = imagesy($img);
  13. //Facteur largeur/hauteur des dimensions max
  14. $whFact = $maxWidth/$maxHeight;
  15. //Facteur largeur/hauteur de l'original
  16. $imgWhFact = $imgWidth/$imgHeight;
  17. //fixe les dimensions du thumb
  18. if($imgWidth <= $maxWidth && $imgHeight <= $maxHeight)
  19. {
  20. $thumbWidth=$imgWidth;
  21. $thumbHeight=$imgHeight;
  22. }
  23. else
  24. {     
  25. if($imgWidth > $imgHeight)
  26. {
  27.  //Si largeur déterminante
  28.  $thumbWidth  = $maxWidth;
  29.  $thumbHeight = $thumbWidth/$imgWhFact;
  30.  if($thumbHeight>$maxHeight)
  31.  {
  32.   $redimfact=$thumbHeight/$maxHeight;
  33.   $thumbHeight=$maxHeight;
  34.   $thumbWidth=$thumbWidth/$redimfact;
  35.  }
  36. }
  37. else
  38. {
  39.  //Si hauteur déterminante
  40.  $thumbHeight = $maxHeight;
  41.  $thumbWidth = $thumbHeight*$imgWhFact;
  42.  if($thumbWidth>$maxWidth)
  43.  {
  44.   $redimfact=$thumbWidth/$maxWidth;
  45.   $thumbWidth=$maxWidth;
  46.   $thumbHeight=$thumbHeight/$redimfact;
  47.  }
  48. }
  49. }
  50. //Créé le thumb (image réduite)
  51. if($maxWidth==600)
  52. {
  53. if($disclaimer==1)
  54.  $thumbHeight2=$thumbHeight+45;
  55. else
  56.  $thumbHeight2=$thumbHeight+15;
  57. }
  58. else
  59. {
  60. $thumbHeight2=$thumbHeight;
  61. }
  62. $imgThumb = ImageCreateTruecolor($thumbWidth, $thumbHeight2);
  63. $white = imagecolorallocate($imgThumb,255,255,255);
  64. $black = imagecolorallocate($imgThumb,0,0,0);
  65. imagefill($imgThumb,0,0,$white);
  66. //Insère l'image de base redimensionnée
  67. ImageCopyResampled($imgThumb, $img, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $imgWidth, $imgHeight);
  68. if($maxWidth==600)
  69. {
  70. $postxtx=$thumbWidth-200;
  71. if($disclaimer==1)
  72.  $postxty=$thumbHeight2-30;
  73. else
  74.  $postxty=$thumbHeight2;
  75. $font1="images/GOTHIC.TTF";
  76. imagettftext($imgThumb, 9, 0, 19, $postxty, $black, $font1,"PHOTO BY ".$user);
  77. imagettftext($imgThumb, 9, 0, $postxtx, $postxty, $black, $font1,"WWW.SHOOTMEAGAIN.COM" );
  78. //imagettftext($img, 16, 0, 20, 54, $white, $font1,$bandname2);
  79. if($disclaimer==1)
  80. {
  81.  $imgcentre=$thumbWidth/2;
  82.  $postxtx=$imgcentre-95;
  83.  $postxty=$thumbHeight2-15;
  84.  imagettftext($imgThumb,7,0,$postxtx, $postxty, $black, $font1,"Cette photo est protégée par les droits d'auteur." );
  85.  $postxtx=$imgcentre-150;
  86.  $postxty=$thumbHeight2-5;
  87.  imagettftext($imgThumb,7,0,$postxtx, $postxty, $black, $font1,"Il est interdit de la copier ou de la diffuser sans l'accord de son auteur." );
  88. }
  89. }
  90. //Nom du fichier thumb
  91. //list($titretof,$ext,$temp) = explode(".",$file);
  92. $imgThumbName = $path.$tofname;
  93. //Créé le fichier thumb
  94. //  $fp = fopen($imgThumbName, "wb" );
  95. //   fclose($fp);
  96. // fflush($fp);
  97. //Renvoie le thumb créé
  98. ImageJpeg($imgThumb, $imgThumbName,95);
  99. imagedestroy($imgThumb);
  100. imagedestroy($img);
  101. return $imgThumbName;
  102. }
  103. ?>


 
Merci de votre aide !
 


---------------
SHOOT ME AGAIN WEBZINE
Reply

Marsh Posté le 06-06-2007 à 14:19:37   

Reply

Marsh Posté le 06-06-2007 à 19:18:40    

Help :/


---------------
SHOOT ME AGAIN WEBZINE
Reply

Marsh Posté le 07-06-2007 à 01:15:43    

Pas bien pigé en quoi t'avais un problème :D

 
Citation :

Comment dois-je procéder ? Je préfère éviter le système de lecture dans chaque dossier, un peu barbare car toutes les photos ne devraient pas être modifiées. Dans ma BD j'ai tout ce qu'il faut pour retrouver un chemin d'accès pour telle ou telle photo, et ce que j'aimerais avoir c'est une fonction à laquelle je puisse dire de modifier la photo 6072 par exemple.  


hé ben tu va chercher le chemin de l'image 6072 grâce à la base, et tu redimensionnes celle-ci [:bien]
Mais je crois que j'ai loupé un truc...

 

edit : par contre l'as l'air de faire 10000 trucs dans ta fonction resize() :/ tu peux pas diviser ? (une fonction miniature, une fonction pour la grande, voire la même fonction pour les deux, avec un parametre taille différent)

Message cité 1 fois
Message édité par theredled le 07-06-2007 à 01:18:02

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 09-06-2007 à 10:09:46    

theredled a écrit :

Pas bien pigé en quoi t'avais un problème :D
 

Citation :

Comment dois-je procéder ? Je préfère éviter le système de lecture dans chaque dossier, un peu barbare car toutes les photos ne devraient pas être modifiées. Dans ma BD j'ai tout ce qu'il faut pour retrouver un chemin d'accès pour telle ou telle photo, et ce que j'aimerais avoir c'est une fonction à laquelle je puisse dire de modifier la photo 6072 par exemple.  


hé ben tu va chercher le chemin de l'image 6072 grâce à la base, et tu redimensionnes celle-ci [:bien]
Mais je crois que j'ai loupé un truc...
 
edit : par contre l'as l'air de faire 10000 trucs dans ta fonction resize() :/ tu peux pas diviser ? (une fonction miniature, une fonction pour la grande, voire la même fonction pour les deux, avec un parametre taille différent)


 
 
Le problème est qu'en général, tout ce que je fais c'est par rapport à des fichiers qu'on uploade, ici je dois ouvrir les fichiers existants et c'est ce truc apparemment tout con que je n'arrive pas à faire, j'ai essayé avec un fopen mais il ne trouve pas le fichier, et si je veux l'ouvrir avec son url http je ne peux l'ouvrir qu'en read...  
 
La redimensionner je pense y arriver, ce script fera l'affaire, et idem pour l'enregistrement. Mais c'est à l'ouverture que je me mélange les pinceaux entre les différents paramètres :/


---------------
SHOOT ME AGAIN WEBZINE
Reply

Marsh Posté le 09-06-2007 à 13:59:21    

[:chacal_one333]

Reply

Marsh Posté le 09-06-2007 à 15:53:20    

Citation :

j'ai essayé avec un fopen mais il ne trouve pas le fichier


ben c'est que le chemin que tu lui passes n'est pas bon [:spanotfote]

 

si tu fais un chemin relatif (genre ../../images/prout.fok), fait bien bien gaffe à ce que l'url soit par rapport au script en cours, et par par rapport au fichier inclu (ou alors utilise dirname(__FILE__).'/../../images/prout.fok' )

Message cité 1 fois
Message édité par theredled le 09-06-2007 à 15:54:11

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 09-06-2007 à 23:12:22    

Je profite de se topic pour poser une petite question.

 

J'ai fais une fonction qui me redimensionne mes images, elle le fais bien mais pour certain cas, quand le fond de l'image est blanc elle me le remplace par du noir.

 

Pour régler le problème j'ai voulu utiliser imagecolorallocate() pour, à la création de mon image, le fond de celle-ci soit blanc par défaut, cela fonctionne mais je reçois toutes une flopée d'erreurs !!!

 

Ce qui est bizarre, c'est que mes images ayant de la transparence passe très bien dans tout les cas !!!!

 

Avez vous une idée?

 

Voici ma fonction :

Code :
  1. function redimensionne($nom, $reduc)
  2. {
  3. $nom = strtolower($nom);
  4. //strrchr() --Trouve la dernière occurrence d'un caractère dans une chaîne
  5. $extension = substr(strrchr($nom, '.'),1);
  6. // La photo est la source
  7. if($extension == "jpeg" || $extension == "jpg" )
  8. {
  9.  $source = imagecreatefromjpeg("$nom" );
  10. }
  11. if($extension == "png" )
  12. {
  13.  $source = imagecreatefrompng("$nom" ); // La photo est la source
  14. }
  15. if($extension == "gif" )
  16. {
  17.  $source = imagecreatefromgif("$nom" ); // La photo est la source
  18. }
  19. if ($extension == "ico" )
  20. {
  21.  return "ico";
  22. }
  23. // Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
  24. $largeur_source = imagesx($source);
  25. $hauteur_source = imagesy($source);
  26. // On crée la miniature vide
  27. if ($largeur_source <= $reduc && $hauteur_source <= $reduc) //les 2 cotés sont plus petit
  28. {
  29.  $destination = imagecreatetruecolor($largeur_source, $hauteur_source);
  30. }
  31. if ($largeur_source > $reduc && $hauteur_source > $reduc) // les 2 cotés sont plus grand
  32. {
  33.  if ($largeur_source > $hauteur_source) //largeur supérieure à hauteur
  34.  {
  35.   $largeur = $reduc;
  36.   $hauteur = floor(($hauteur_source*$reduc)/$largeur_source);
  37.   $destination = imagecreatetruecolor($largeur, $hauteur);
  38.  }
  39.  if ($largeur_source < $hauteur_source) //hauteur supérieure à largeur
  40.  {
  41.   if ($reduc >= 360 && $reduc <= 500)
  42.   {
  43.    $reduc = 360;
  44.   }
  45.   $hauteur = $reduc;
  46.   $largeur = floor(($largeur_source*$reduc)/$hauteur_source);
  47.   $destination = imagecreatetruecolor($largeur, $hauteur);
  48.  }
  49.  if ($hauteur_source == $largeur_source) //hauteur egal à largeur
  50.  {
  51.   if ($reduc >= 360 && $reduc <= 500)
  52.   {
  53.    $reduc = 360;
  54.   }
  55.   $hauteur = $reduc;
  56.   $largeur = $reduc;
  57.   $destination = imagecreatetruecolor($largeur, $hauteur);
  58.  }
  59. }
  60. $largeur_destination = imagesx($destination);
  61. $hauteur_destination = imagesy($destination);
  62. // On crée la miniature
  63. imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
  64. // On enregistre la miniature sous le nom "*.extension"
  65. if($extension == "jpeg" || $extension == "jpg" )
  66. {
  67.  imagejpeg($destination, "$nom" );
  68. }
  69. if($extension == "png" )
  70. {
  71.  imagepng($destination, "$nom" );
  72. }
  73. if($extension == "gif" )
  74. {
  75.  imagegif($destination, "$nom" );
  76. }
  77. }


Message édité par kyrilou le 09-06-2007 à 23:15:56
Reply

Marsh Posté le 14-06-2007 à 10:31:28    

theredled a écrit :

Citation :

j'ai essayé avec un fopen mais il ne trouve pas le fichier


ben c'est que le chemin que tu lui passes n'est pas bon [:spanotfote]
 
si tu fais un chemin relatif (genre ../../images/prout.fok), fait bien bien gaffe à ce que l'url soit par rapport au script en cours, et par par rapport au fichier inclu (ou alors utilise dirname(__FILE__).'/../../images/prout.fok' )


 
 
Ah merde effectivement, ça merdait dans mon chemin, au temps pour moi ! :D  
 
Merci 1000 fois, que dieu te bénisse toi et toute ta famille !  :jap:


---------------
SHOOT ME AGAIN WEBZINE
Reply

Marsh Posté le 14-06-2007 à 14:14:59    

Dawa a écrit :

Ah merde effectivement, ça merdait dans mon chemin, au temps pour moi ! :D

 

Merci 1000 fois, que dieu te bénisse toi et toute ta famille !  :jap:


C'est un honneur pour moi de contenter MÖsieur dawa [:dawa]


Message édité par theredled le 14-06-2007 à 14:18:27

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed