Avatar True Resize perso (support transparence des png)

Image Demande de support pour les mods indépendants de la base .
Règles du forum
Merci de respecter les règles de la section pour les titres :

[Nom du mod - Version] Description du problème .
Verrouillé
     
Avatar du membre

Auteur du sujet
Pro_info
Messages : 357
Enregistré le : avril 2011
Contact :

Avatar True Resize perso (support transparence des png)

Message par Pro_info » dim. 21 juin 2015 17:32

Salut,
j'ai cru voir que certains avaient des problèmes pour redimensionner les images à l'import dans phpbb3.0.8 à 3.0.14

Je me suis inspiré du mod avatar true resize (dont j'ai oublié l'auteur :euh: )

Le mod de base fonctionne très bien sous toutes les versions de phpbb3 (en tout cas jusqu'à la dernière connue qu'est la 3.0.14)
Il redimensionne les images lorsque les utilisateurs les importent via leurs panels,
si le paramètre dans l'acp autorise un format d'avatar de 250x150 par exemple :
- une image de 1920x1080 sera redimensionnée à 250x140
- une image de 1316x1380 sera redimensionnée à 143x150
etc.
(bien sûr, il faut que l'image de base soit en dessous de la taille limite fixée dans l'acp)

Ma modif corrige juste une ligne modifié lors de l'installation du mod et prend en charge la transparence des png et des gif (animation non conservée en revanche, il faudrait une librairie et tout)

Installation du mod perso :
Open: includes/functions_upload.php
Find :
if (!$this->upload->valid_dimensions($this))
Replace with :
if (!$this->upload->valid_dimensions($this) && $_GET['mode'] != 'avatar')
Find :
/**
* Performing additional checks
*/

Add before :
/**
* Resize avatar with the true diemensions
*/
function resize_avatar()
{
if ( $_GET['mode'] == "avatar" ) {
$limite_largeur = $this->upload->max_width;
$limite_hauteur = $this->upload->max_height;

$size = getimagesize($this->destination_file);

$largeur = $size[0];
$hauteur = $size[1];

if($hauteur > $limite_hauteur OR $largeur > $limite_largeur)
{
if($largeur > $limite_largeur)
{
$hauteur = $hauteur / ($largeur / $limite_largeur);
$largeur = $limite_largeur;
}
if($hauteur > $limite_hauteur)
{
$largeur = $largeur / ($hauteur / $limite_hauteur);
$hauteur = $limite_hauteur;
}

$type = strtolower($this->extension);

if($type == 'jpeg')
$type = 'jpg';

switch($type)
{
case 'bmp':
$img = imagecreatefromwbmp($this->destination_file);
break;
case 'gif':
$img = imagecreatefromgif($this->destination_file);
break;
case 'jpg':
$img = imagecreatefromjpeg($this->destination_file);
break;
case 'png':
$img = imagecreatefrompng($this->destination_file);
break;
default:
$img = imagecreatefromjpeg($this->destination_file);
}

$new = imagecreatetruecolor($largeur, $hauteur);

// preserve transparency
if($type == "gif" or $type == "png"){
imagecolortransparent($new, imagecolorallocatealpha($new, 0, 0, 0, 127));
imagealphablending($new, false);
imagesavealpha($new, true);
}

imagecopyresampled($new, $img, 0, 0, 0, 0, $largeur, $hauteur, $size[0], $size[1]);

switch($type)
{
case 'bmp':
imagewbmp($new, $this->destination_file);
break;
case 'gif':
imagegif($new, $this->destination_file);
break;
case 'jpg':
imagejpeg($new, $this->destination_file);
break;
case 'png':
imagepng($new, $this->destination_file);
break;
default:
imagejpeg($new, $this->destination_file);
}

/* $destination = imagecreatetruecolor($largeur, $hauteur);

if ( $this->extension == "jpg" || $this->extension == "jpeg" ) $source = imagecreatefromjpeg($this->destination_file);
elseif ( $this->extension == "png" ) $source = imagecreatefrompng($this->destination_file);
elseif ( $this->extension == "gif" ) $source = imagecreatefromgif($this->destination_file);

imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur, $hauteur, $size[0], $size[1]);

if ( $this->extension == "jpg" || $this->extension == "jpeg" ) imagejpeg($destination, $this->destination_file);
elseif ( $this->extension == "png" ) imagepng($destination, $this->destination_file);
elseif ( $this->extension == "gif" ) imagegif($destination, $this->destination_file);
*/ }
}
}
Find :
phpbb_chmod($this->destination_file, $chmod);
Add before :
if ( $_GET['mode'] == 'avatar' ) $this->resize_avatar();
Voilà, si ça peut servir à quelqu'un, plutôt que de modifier la taille de l'affichage des avatars à tous les endroits...

Verrouillé
  • Sujets similaires
    Réponses
    Vues
    Dernier message

Retourner vers « Mods indépendants de la base »