Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1287 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1570937
Dawa
www.shootmeagain.com
Posté le 06-06-2007 à 14:19:37  profilanswer
 

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
mood
Publicité
Posté le 06-06-2007 à 14:19:37  profilanswer
 

n°1571213
Dawa
www.shootmeagain.com
Posté le 06-06-2007 à 19:18:40  profilanswer
 

Help :/


---------------
SHOOT ME AGAIN WEBZINE
n°1571282
theredled
● REC
Posté le 07-06-2007 à 01:15:43  profilanswer
 

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
n°1572663
Dawa
www.shootmeagain.com
Posté le 09-06-2007 à 10:09:46  profilanswer
 

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
n°1572702
Dawa
www.shootmeagain.com
Posté le 09-06-2007 à 13:59:21  profilanswer
 

[:chacal_one333]

n°1572718
theredled
● REC
Posté le 09-06-2007 à 15:53:20  profilanswer
 

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
n°1572814
kyrilou
Malo mori quam feodari
Posté le 09-06-2007 à 23:12:22  profilanswer
 

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
n°1574770
Dawa
www.shootmeagain.com
Posté le 14-06-2007 à 10:31:28  profilanswer
 

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
n°1574906
theredled
● REC
Posté le 14-06-2007 à 14:14:59  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
modifier une occurence en cascade doc xls etc..modifier une chaine de caractere
modifier une chaine dans des macrosparcours fichiers dans un repertoire
Ouvrir un lecteur video en plein écran.modifier le tamplate
nombre de série delphi et le clé d'autorisationAide pour fichiers PASCAL
concatener deux fichiers[dreamweaver] pb. d'encodage de mes fichiers
Plus de sujets relatifs à : [PHP] Ouvrir et modifier une série de fichiers jpg


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR