Archives FluxBB.fr

Les archives de FluxBB.fr

Vous n'êtes pas identifié(e).

#1 04-01-2008 16:51:13

Apophis
Membre

Petite mod de redimensionnement des avatars (PunBB)

J'ai juste fait une petite mod (ou plutot une astuce car c'est pas vraiment une mod) pour redimensionner les avatars des membres lorsqu'ils les telechargent dans leur profil, et j'essaye de la rendre plus puissante. En effet, je veux que mon script soit capable de traiter n'importe qu'elle resolution de photo et d'en creer une miniature de taille inferieure ou égale à 150*150 pixels.
Pour le moment, il est capable de creer de belles miniatures de photos dont la difference entre le height et le width n'excede pas 100 ou a plus 200 pixels. Par exemple, lorsque je veux redimensionner une photo de 400*300, j'y arrive et je parviens à creer une miniature 150*112, mais par contre si je veux creer une miniature d'une photo de 1280*768 ou meme par exemple de 500*1000, c'est le bazar total: l'image est soit trop haute pour la largeur, ou soit trop large pour la hauteur.  Si quelqu'un a une amelioration qu'il me fasse signe.

/* Mod pour creer des miniatures à partir de l'image uploadée */
            $imgsource = $uploaded_file['tmp_name'];
            $source = imagecreatefromjpeg($imgsource); // La photo est la source
            if(imagesx($source) > 150 || imagesy($source) > 150 )
                {
                $hauteur_source = imagesy($source);
                for(($largeur_source = imagesx($source)); $largeur_source > 150; --$largeur_source)
                    {
                    $hauteur_source = $hauteur_source - 0.75;
                    }
                $destination = imagecreatetruecolor($largeur_source, $hauteur_source); // On crée le support vide avec les dimensions de la miniature

                $largeur_destination = imagesx($destination);
                $hauteur_destination = imagesy($destination);

                // On copie la source dans le support
                imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);

                // On enregistre la miniature dans miniavatar.jpg
                imagejpeg($destination,'miniavatar.jpg');
                $uploaded_file['tmp_name'] = "miniavatar.jpg";            
                
            // et le reste suit la procedure de punBB

            // Move the file to the avatar directory. We do this before checking the width/height to circumvent open_basedir restrictions.
            if (!@rename($uploaded_file['tmp_name'], $pun_config['o_avatars_dir'].'/'.$id.'.tmp'))
                message($lang_profile['Move failed'].' <a href="mailto:'.$pun_config['o_admin_email'].'">'.$pun_config['o_admin_email'].'</a>.');

            // Now check the width/height
            list($width, $height, $type,) = getimagesize($pun_config['o_avatars_dir'].'/'.$id.'.tmp');
            if (empty($width) || empty($height) || $width > $pun_config['o_avatars_width'] || $height > $pun_config['o_avatars_height'])
            {
                @unlink($pun_config['o_avatars_dir'].'/'.$id.'.tmp');
                message($lang_profile['Too wide or high'].' '.$pun_config['o_avatars_width'].'x'.$pun_config['o_avatars_height'].' '.$lang_profile['pixels'].'.');
            }
            else if ($type == 1 && $uploaded_file['type'] != 'image/gif')    // Prevent dodgy uploads
            {
                @unlink($pun_config['o_avatars_dir'].'/'.$id.'.tmp');
                message($lang_profile['Bad type']);
            }            

            // Delete any old avatars and put the new one in place
            @unlink($pun_config['o_avatars_dir'].'/'.$id.$extensions[0]);
            @unlink($pun_config['o_avatars_dir'].'/'.$id.$extensions[1]);
            @unlink($pun_config['o_avatars_dir'].'/'.$id.$extensions[2]);
            @rename($pun_config['o_avatars_dir'].'/'.$id.'.tmp', $pun_config['o_avatars_dir'].'/'.$id.$extensions[0]);
            @chmod($pun_config['o_avatars_dir'].'/'.$id.$extensions[0], 0644);
                
                }
            else {
            // Move the file to the avatar directory. We do this before checking the width/height to circumvent open_basedir restrictions.
            if (!@move_uploaded_file($uploaded_file['tmp_name'], $pun_config['o_avatars_dir'].'/'.$id.'.tmp'))
                message($lang_profile['Move failed'].' <a href="mailto:'.$pun_config['o_admin_email'].'">'.$pun_config['o_admin_email'].'</a>.');

            // Now check the width/height
            list($width, $height, $type,) = getimagesize($pun_config['o_avatars_dir'].'/'.$id.'.tmp');
            if (empty($width) || empty($height) || $width > $pun_config['o_avatars_width'] || $height > $pun_config['o_avatars_height'])
            {
                @unlink($pun_config['o_avatars_dir'].'/'.$id.'.tmp');
                message($lang_profile['Too wide or high'].' '.$pun_config['o_avatars_width'].'x'.$pun_config['o_avatars_height'].' '.$lang_profile['pixels'].'.');
            }
            else if ($type == 1 && $uploaded_file['type'] != 'image/gif')    // Prevent dodgy uploads
            {
                @unlink($pun_config['o_avatars_dir'].'/'.$id.'.tmp');
                message($lang_profile['Bad type']);
            }            

            // Delete any old avatars and put the new one in place
            @unlink($pun_config['o_avatars_dir'].'/'.$id.$extensions[0]);
            @unlink($pun_config['o_avatars_dir'].'/'.$id.$extensions[1]);
            @unlink($pun_config['o_avatars_dir'].'/'.$id.$extensions[2]);
            @rename($pun_config['o_avatars_dir'].'/'.$id.'.tmp', $pun_config['o_avatars_dir'].'/'.$id.$extensions[0]);
            @chmod($pun_config['o_avatars_dir'].'/'.$id.$extensions[0], 0644);
            }
        /* Fin de Mod */

PS: il y'a certainement des variables qui pourraient etre supprimées mais je n'ai pas le temps de faire un code plus propre.


Join us now and share the software, Hackers you'll be FREE!

Hors ligne

#2 04-01-2008 16:56:34

MzRT
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

Je n'ai pas les compétences en php pour pouvoir t'aider là dessus mais en tout cas félicitation pour l'idée, c'est vraiment intéressant.

Et oui, tout les membres ne sont pas forcement capable de réduire une photo dans une dimension bien  précise ou dans un poid limité smile

Hors ligne

#3 04-01-2008 17:03:03

Apophis
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

Merci happy . J'ai fait d'autres petites astuces dans le genre (pour lesquelles ils n'existe pas de mods) pour mon forum et si j'ai le temps un jour je les regrouperais et les posterais ici.


Join us now and share the software, Hackers you'll be FREE!

Hors ligne

#4 04-01-2008 19:22:17

NoX09
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

C'est une bonne idée ça wink

Tu place ce code ou ? dans quel fichier ? j'ai envie de le tester happy


Utiliser : FAQ - AIDE - RECHERCHE

Hors ligne

#5 04-01-2008 19:47:35

Apophis
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

Ben puisqu'il y'a des interessés:

##
##          Titre mod :  Pas encore trouvé ^_^
##
##         Pour PunBB :  mod testée sur la version 1.2.16
##     Date de sortie :  2008-01-04
##
##             Auteur :  Malick alias Apophis (webmaster[AT]generationconsciente.fr)
##
##        Description :  Ce script permet juste de redimensionner 
##                            automatiquement les avatars des membres quand ils les ##                            telechargent depuis leur profil
##                       
##                            Il serait cependant judicieux d'augmenter (depuis le 
##                            panneau d'administration) la taille des avatars uploadable   
##                            par les membres et leurs dimensions au maximums (sinon 
##                            le script ne passerait pas ^^)
##
##  Fichiers affectés :  profil.php
##
##         DISCLAIMER :  Veuillez noter que ces mods ne sont pas
##                       officiellement supportés par PunBB. L'installation
##                       de ces modifications est à vos risques et périls.
##                       N'oubliez pas de sauvegarder la base de données et
##                       les fichiers affectés avant de procéder à
##                       l'installation de cette modification.
##

#
#---------[ 1. OUVRIR ]----------------------------------------
#
profil.php
#
#---------[ 2. TROUVER ]----------------------------------------
#

// Move the file to the avatar directory. We do this before checking the width/height to circumvent open_basedir restrictions.
            if (!@move_uploaded_file($uploaded_file['tmp_name'], $pun_config['o_avatars_dir'].'/'.$id.'.tmp'))
                message($lang_profile['Move failed'].' <a href="mailto:'.$pun_config['o_admin_email'].'">'.$pun_config['o_admin_email'].'</a>.');

            // Now check the width/height
            list($width, $height, $type,) = getimagesize($pun_config['o_avatars_dir'].'/'.$id.'.tmp');
            if (empty($width) || empty($height) || $width > $pun_config['o_avatars_width'] || $height > $pun_config['o_avatars_height'])
            {
                @unlink($pun_config['o_avatars_dir'].'/'.$id.'.tmp');
                message($lang_profile['Too wide or high'].' '.$pun_config['o_avatars_width'].'x'.$pun_config['o_avatars_height'].' '.$lang_profile['pixels'].'.');
            }
            else if ($type == 1 && $uploaded_file['type'] != 'image/gif')    // Prevent dodgy uploads
            {
                @unlink($pun_config['o_avatars_dir'].'/'.$id.'.tmp');
                message($lang_profile['Bad type']);
            }            

            // Delete any old avatars and put the new one in place
            @unlink($pun_config['o_avatars_dir'].'/'.$id.$extensions[0]);
            @unlink($pun_config['o_avatars_dir'].'/'.$id.$extensions[1]);
            @unlink($pun_config['o_avatars_dir'].'/'.$id.$extensions[2]);
            @rename($pun_config['o_avatars_dir'].'/'.$id.'.tmp', $pun_config['o_avatars_dir'].'/'.$id.$extensions[0]);
            @chmod($pun_config['o_avatars_dir'].'/'.$id.$extensions[0], 0644);
        }

#
#---------[ 3. REMPLACER PAR ]----------------------------------------
#
Le code de mon premier post
#
#---------[ 4. ENREGISTRER ET ENVOYER SUR LE SERVEUR ]----------------------------------------
#
profil.php
#
#---------[ 5. ENJOY ]----------------------------------------

Join us now and share the software, Hackers you'll be FREE!

Hors ligne

#6 04-01-2008 19:48:41

Apophis
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

Maintenant le but de ce post n'était pas vraiment de faire une mod (désolé) mais plutot de trouver quelqu'un pour m'aider dans mon problème.

Dernière modification par Apophis (04-01-2008 19:50:58)


Join us now and share the software, Hackers you'll be FREE!

Hors ligne

#7 04-01-2008 21:26:35

Apophis
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

UP: Si quelqu'un a seulement l'algorithme je suis aussi prenant. j'en ai vraiment besoin parce que certaines miniatures ressemblent à des zombies!


Join us now and share the software, Hackers you'll be FREE!

Hors ligne

#8 06-01-2008 21:28:37

Apophis
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

Heu... personne?


Join us now and share the software, Hackers you'll be FREE!

Hors ligne

#9 06-01-2008 22:02:31

yemgi
Expatrié

Re : Petite mod de redimensionnement des avatars (PunBB)

pourquoi ne pas simplement supprimer le test de taille dans le script d'origine?
Il suffit de supprimer ou commenter

if (empty($width) || empty($height) || $width > $pun_config['o_avatars_width'] || $height > $pun_config['o_avatars_height'])
            {
                @unlink($pun_config['o_avatars_dir'].'/'.$id.'.tmp');
                message($lang_profile['Too wide or high'].' '.$pun_config['o_avatars_width'].'x'.$pun_config['o_avatars_height'].' '.$lang_profile['pixels'].'.');
            }
            else

Hors ligne

#10 06-01-2008 22:20:24

Apophis
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

Heu je pense pas vraiment que t'es compris. Le but en fait est de permettre aux membres de pouvoir mettre leurs photos en avatars sans pour autant qu'ils soient obligés de le redimensionner  eux-même. Si on supprime le test de taille comme tu dis tu aurais surement des avatars de la taille d'une mangue sur ton forum, ce qui n'est pas tres interessant je te l'accorde wink
Mon script le fait deja mais il n'est pas tres au point vu le fait que si on essaie de redimensionner des images tres rectangulaires (du genre 300*800px ou tout autre), la miniature faite n'est pas du tout agréable à voir.
Ceci est en grande partie due au faite que le redimensionnement du height et du width d'une image ne se fait pas proportiellement: pour 1 pixel enlevé de la largeur, il faut retirer non pas 1 mais 0.75 pixel de la hauteur (d'où la boucle de mon script qui fait ainsi jusqu'à ce que la largeur soit inferieure à 150px)

Dernière modification par Apophis (06-01-2008 22:29:41)


Join us now and share the software, Hackers you'll be FREE!

Hors ligne

#11 06-01-2008 22:56:50

yemgi
Expatrié

Re : Petite mod de redimensionnement des avatars (PunBB)

ok, je vois.
apparemment, ton code ne fonctionne que pour une image jpeg?

Dans ton code, je remplacerais

            if(imagesx($source) > 150 || imagesy($source) > 150 )
                {
                $hauteur_source = imagesy($source);
                for(($largeur_source = imagesx($source)); $largeur_source > 150; --$largeur_source)
                    {
                    $hauteur_source = $hauteur_source - 0.75;
                    }
                $destination = imagecreatetruecolor($largeur_source, $hauteur_source); // On crée le support vide avec les dimensions de la miniature

                $largeur_destination = imagesx($destination);
                $hauteur_destination = imagesy($destination);

                // On copie la source dans le support
                imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);

par

            if(imagesx($source) > 150 || imagesy($source) > 150 )
                {
                $hauteur_source = imagesy($source);
                $largeur_source = imagesx($source);

                         $zoomw = $largeur_source/150;
                         $zoomh = $hauteur_source/150;
                                if ($zoomw > $zoomh)
                                    $zoom = $zoomw;
                        else
                            $zoom = $zoomh;
                            
                                $largeur_destination = $largeur_source/$zoom;
                                $hauteur_destination = $hauteur_source/$zoom;
                $destination = imagecreatetruecolor($largeur_destination, $hauteur_destination); // On crée le support vide avec les dimensions de la miniature
                
                // On copie la source dans le support
                imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);

par contre c'est pas tres propre comme facon de faire je trouve

Hors ligne

#12 06-01-2008 23:34:12

Apophis
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

Je vois ce que tu veux dire et c'est par un script pareil que j'avais débuté mon script. Mais comme je l'ai plus haut, cette méthode ne donnera pas une miniature fidèle puisqu'un redimensionnement correcte n'est pas fait proportionnellement (pour des images de petites taille, ca peut passer mais des qu'on atteint des images avec de fortes dimensions, les 0,25px ne peuvent plus etres négligés):
disons que pour une image de 200*230px, en redimensionnant proportionnellement, on a une miniature de 150*180. En redimensionnant "correctement" on a une miniature de 150*192,5. La difference peut ne meme pas etre percue
Maintenant pour une image de  2000*2300px, un redimensionnement proportionnel donne une miniature de 150*450, et un redimensionnement "correcte", une de 150*912,5!!!
Vous saississez maintenant ou je veux en venir?

Mais cependant, j'ai suis entrain de me dire qu'en passant par le calcul du coefficient le plus grand (comme ce que tu as fait avec ton script par la variable $zoom), et qu'en fonction de ca je choisisse le redimensionnement de la hauteur ou de la largeur ca pourrait fonctionner.
Malheureusement non, en faite (suite à l'analyse de la methode de redimensionnement de photoshop) je me pense que que le redimensionnement se fait de maniere "correcte" jusqu'à une certaine taille (dependant de la taille originelle de l'image), et qu'apres c'est un redimensionnement proportionnel. Mais maintenant essayer de faire un script pareil releve du parcours du combattant.

Edit: Le script fonctionne pour toutes les images, il transforme juste l'extension de l'image apres le redimensionnement en jpg. L'affichage de l'image n'en est pas du tout affectée, seul les propriétés du container varient (et comme on n'en a rien à branler happy). Ah et desolé pour le pavé

Dernière modification par Apophis (06-01-2008 23:37:42)


Join us now and share the software, Hackers you'll be FREE!

Hors ligne

#13 07-01-2008 00:33:44

yemgi
Expatrié

Re : Petite mod de redimensionnement des avatars (PunBB)

J'ai jamais eu ce probleme de dimension non respectée. As-tu essayé ave le code que j'ai donné?

Hors ligne

#14 07-01-2008 00:46:05

Apophis
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

Oui j'avais fait un code exactement pareil (sauf que j'utilisait pas les memes noms de variables bien sur ($coefficient à la place de $zoom) et la comparaison était simplement remplacée par un "$coeff = max($coefficient_height, $coefficient_width)")


Join us now and share the software, Hackers you'll be FREE!

Hors ligne

#15 07-01-2008 01:22:06

yemgi
Expatrié

Re : Petite mod de redimensionnement des avatars (PunBB)

voici la fonction que j'utilise sur mon site pour redimensionner les photos uploadées.  Je n'ai aucun probleme d'échelle non respectée par contre j'avais un probleme de qualité de l'image obtenue au départ et je l'ai corrigée en ajoutant le parametre optionnel de qualité a la fonction imagejpeg() et en la mettant a 90% minimum

 function make_thumbnail($image , $largeur_max , $hauteur_max , $source , $destination , $prefixe){
 if (!file_exists($source.$image)) {
  echo "L'image $image n'existe pas";
  exit;
  }
 
  // On verifie que l'extention du fichier est bien une image jpg, jpeg ou gif
  $ext=strtolower(strrchr($image, '.'));
  if ($ext!=".jpg" AND $ext!=".jpeg"){
  echo "<br>Votre image doit être un jpg ou jpeg<br>";
  exit;
  }
 
  $size = getimagesize($source.$image);
 
  $largeur_src=$size[0];
  $hauteur_src=$size[1];
 
  //2ieme verification -> on verifie que le type du fichier est un jpg, jpeg ou gif
  // $size[2] -> type de l'image : 1 = GIF , 2 = JPG, JPEG
  if ($size[2]!=1 AND $size[2]!=2){
  echo "<br>Format non supporté<br>";
  exit;
  }
 /*
  if($size[2]==1){ // format gif
  $image_src=imagecreatefromgif($source.$image);
  }*/
 
  if($size[2]==2){ // format jpg ou jpeg
  $image_src=imagecreatefromjpeg($source.$image);
  }
 
 
  // on verifie que l'image source ne soit pas plus petite que l'image de destination
  if ($largeur_src>$largeur_max OR $hauteur_src>$hauteur_max){
  // si la largeur est plus grande que la hauteur
  if ($hauteur_src<=$largeur_src){
  $ratio=$largeur_max/$largeur_src;
  }else{
  $ratio=$hauteur_max/$hauteur_src;
  }
  }else{
  $ratio=1; // l'image créee sera identique à l'originale
  }
 
  $image_dest=imagecreatetruecolor(round($largeur_src*$ratio),
    round($hauteur_src*$ratio));
  imagecopyresized($image_dest, $image_src, 0, 0, 0, 0,
    round($largeur_src*$ratio), round($hauteur_src*$ratio), $largeur_src, $hauteur_src);
 
  if(!imagejpeg($image_dest, $destination.$prefixe.$image, 90)){
  echo "la création de la vignette a echouée pour l'image $image";
  exit;
  }
}

Hors ligne

#16 07-01-2008 01:42:01

Apophis
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

Et tu avais des images parfaitement miniaturisées? As tu essayé avec des photos ayant des dimensions élévées et tres differentes (du genre un ecart entre la hauteur et la largeur de plus de 500 ou meme 100 px)?
Bon je crois que je vais reessayer encore une fois (peut etre que c'est la photo qui n'est n'etait pas bien)

Dernière modification par Apophis (07-01-2008 01:42:34)


Join us now and share the software, Hackers you'll be FREE!

Hors ligne

#17 07-01-2008 12:52:45

yemgi
Expatrié

Re : Petite mod de redimensionnement des avatars (PunBB)

Mes utilisateurs uploadent régulierement du 1600x1200 certains ont meme utilisé des grandes résulutions (supérieur a 2048px de coté) et aucun probleme. LA seule limitation c'est le poids de l'image

Hors ligne

#18 10-01-2008 06:42:47

Apophis
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

Bon ben j'ai réessayé le script et il semble que ca fonctionne correctement maintenant avec le cacul des coefficients (j'attends toujours de voir si y'a pas un pepin avec une autre image pour me prononcer definitivement). Merci


Join us now and share the software, Hackers you'll be FREE!

Hors ligne

#19 10-01-2008 15:01:49

TLP
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

Bonjour,

J'avais essayé un script du même genre pour les avatars, mais après quelques mise à jour du forum, j'en ai eu assez de toujours faire les modifications smile

J'ai donc adopté la solution de garder le système par défaut du forum, et de redimensionner l'image avec le CSS.

Si cela peut donner des idées à d'autres...

Hors ligne

#20 10-01-2008 15:39:59

Apophis
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

Ca m'interesse ta methode. Peut tu developper?


Join us now and share the software, Hackers you'll be FREE!

Hors ligne

#21 12-01-2008 09:10:29

TLP
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

Apophis a écrit :

Ca m'interesse ta methode. Peut tu developper?

Tout est expliqué dans le descriptif smile Pour aller plus loin, l'espace réservé à l'affichage de l'avatar contient l'image par défaut en fond. En suite, si le membre a envoyé un avatar sur le site alors elle se place au-dessus et les dimensions sont gérées par le CSS.

Cela produit des déformations si le ratio de l'image ne correspond pas à celui prévu par les dimensions inscrites dans le CSS, mais c'est mieux - il me semble - que de refaire les manipulations à chaque nouvelle mise à jour.

Pour le codage et un aperçu, je te laisse te rendre sur mon forum.

Hors ligne

#22 09-06-2009 11:18:40

Starcom
Membre

Re : Petite mod de redimensionnement des avatars (PunBB)

Je déterre ce "vieux" post pour vous informer que j'ai modifié cette modification d'Apophis pour les besoins de mon propre forum.

Je pense que cette petite mod a maintenant une maturité suffisante pour sortir des cartons et qu'elle peut intéresser la communauté. Je vais donc proposer son ajout ici et sur le site officiel en mon nom en tant que contributeur, mais en désignant Apophis comme l'auteur initial.

Au programme:
- Révision de la zone à modifier
- Import Gif, Jpg et Png corrects (formats d'avatars supportés d'origine par FluxBB)
- Taille des Avatars définie par le paramétrage indiqué dans les options de FluxBB (la modif d'origine créait des avatars de 150x150 maxi sans tenir compte du paramétrage du forum)
- Compatibilité FluxBB 1.2.21 testée ok.

Voilà, je me grouille de vous mettre tout ça en ligne.

Dernière modification par Starcom (09-06-2009 12:25:53)

Hors ligne

Pied de page des forums