Vignette en recadrant avec taille fixe!

Soyez le premier à donner votre avis sur cette source.

Vue 6 064 fois - Téléchargée 387 fois

Description

Marre de voir des scripts qui se contentent de redimensionner l'image pour créer des vignettes?
Frustré d'avoir des vignettes de tailles différente parce que vous ne voulez pas les compresser?

La solution est pourtant simple, recadrer la vignette et laisser tomber les rognures latérales pour que le thumbnail soit toujours de taille fixe!

Or jusqu'à présent personne n'a pris la peine de poster une source pareille ou du moins, pas une source aussi simple.

En somme cette source reste très simple, j'en suis conscient; j'espère juste qu'elle vous sera utile...

Source / Exemple :


<?php
function get_extension($filename)
	{
		$ext = substr(strtolower(strrchr(basename($filename), ".")), 1);
		return $ext;
	}
function imageanytype ($image,$nomImage, $quality=100)
	{
		if (!IMG_JPEG) exit("erreur: librairie GD non activée!");
		
		switch (get_extension($nomImage))
			{
				case "gif":
					return imagegif($image,$nomImage);
					$fctImage = imagegif;
					break;
				case "jpg":
					return imagejpeg($image,$nomImage,$quality);
					break;
				case "png":
					return imagepng($image,$nomImage);
					break;
				case "wbmp":
				case "bmp":
					return imagewbmp($image,$nomImage);
					break;
				case "xbm":
					return imagexbm($image,$nomImage);
					break;
			}
	}
function imagecreatefromanytype ($nomImage)
	{
		if (!IMG_JPEG) exit("erreur: librairie GD non activée!");
		$info = getimagesize($nomImage);
		switch ($info[2])
			{
				case IMG_GIF:
					return imagecreatefromgif($nomImage);
					$fctImage = imagegif;
					break;
				case IMG_JPEG:
					return imagecreatefromjpeg($nomImage);
					break;
				case IMG_PNG:
					return imagecreatefrompng($nomImage);
					break;
				case IMG_WBMP:
					return imagecreatefromwbmp($nomImage);
					break;
				case IMG_XBM:
					return imagecreatefromxbm($nomImage);
					break;
			}
	}
function vignette ($nomImage, $largeur_dest = 100,$hauteur_dest = 75)
	{
		$source=imagecreatefromanytype($nomImage);
		$largeur_src = imagesx($source);
		$hauteur_src = imagesy($source);
		$imageFinale = imagecreatetruecolor ($largeur_dest,$hauteur_dest);
		
		$hauteur_temp=floor($largeur_dest*$hauteur_src/$largeur_src);
		$largeur_temp=floor($largeur_src*$hauteur_dest/$hauteur_src);
		
		if($largeur_temp >= $hauteur_temp AND $largeur_temp >= $largeur_dest) //on prend la hauteur
			{
				
				$semi_diff= floor(($largeur_temp - $largeur_dest )/2);
				imagecopyresampled($imageFinale, $source, -$semi_diff, 0, 0,0, $largeur_temp, $hauteur_dest, $largeur_src, $hauteur_src);				
			}
		else //on prend la largeur
			{
				
				$semi_diff= floor(($hauteur_temp - $hauteur_dest )/2);
				imagecopyresampled($imageFinale, $source, 0, -$semi_diff, 0, 0, $largeur_dest, $hauteur_temp, $largeur_src, $hauteur_src);
			}
		imageanytype($imageFinale,dirname($nomImage)."/_thb_".basename($nomImage),100); 
		return(dirname($nomImage)."/_thb_".basename($nomImage));
	}
?>

Conclusion :


Pour afficher le résultat:
<img src="<?php echo vignette("SourceImage.jpg"); ?>" style="border:solid 1px black;" />
ou

<img src="<?php echo vignette("SourceImage.jpg",70,50); ?>" style="border:solid 1px black;" />

voire

<a href="SourceImage.jpg"><img src="<?php echo vignette("SourceImage.jpg",75,50); ?>" style="border:solid 1px black;" /></a>

P.S.: n'oubliez pas:
1. Il vous faut la librairie GD activée
2. Il vous faut les droits d'écriture sur le dossier
3. enjoy ;-)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
32
Date d'inscription
jeudi 18 mai 2006
Statut
Membre
Dernière intervention
5 août 2010

Salut!
C'est exactement ce que je cherchais, et comme je suis pas assez douée en PHP pour le faire toute seule :p
En tout cas merci pour ce script court et très efficace :)
Messages postés
2
Date d'inscription
jeudi 8 décembre 2005
Statut
Membre
Dernière intervention
19 janvier 2010

Merci beaucoup pour ce script ! Après avoir perdu espoir dans la réalisation par mes soins j'ai passé un bout a chercher sur le net un script comme celui-ci ! Une bonne soirée (matinée) qui ce termine :)
Messages postés
8
Date d'inscription
dimanche 28 juin 2009
Statut
Membre
Dernière intervention
16 octobre 2009

Bonjour,

Merci pour cette fonction tres pratique.

Personnellement j'ai ajoute :
- un parametre pour demander la creation (ou non) de la miniature. (ce qui permet de decider ailleurs si la miniature
doit etre recree ou non).
- un petit test pour verifier si la miniature existe deja,
et pour ne pas la creer a chaque fois.

function vignette( $nomImage,
$largeur_dest = 140,
$hauteur_dest = 120,
$demande_creation = false)
{
$nomMiniature =
dirname($nomImage)."/_thb_".basename($nomImage);

// si le fichier miniature n'existe pas,
// ou si on demande a le cree, on genere la miniature
if( !file_exists($nomMiniature) or
$demande_creation == true )
{
// corps de la fonction inchange
// ...

// utilisation du nom de la miniature
imageanytype($imageFinale, $nomMiniature, 100);
}
return($nomMiniature);
}

Cordialement
Messages postés
2080
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
1
Salut,
il me semble qu'il y a une bourde là :
# return imagecreatefromgif($nomImage);
# $fctImage = imagegif;
# break;

Le return empêche l'exécution du reste donc $fctImage n'est pas défini et break ne sert à rien, dans les lignes du dessous non plus.

A+
Messages postés
156
Date d'inscription
lundi 23 juin 2003
Statut
Membre
Dernière intervention
27 janvier 2009

Merci pour ce script que je vais tester tantôt dans mon CMS et qui me permettra de ne plus imposer le même rapport longueur/largeur aux images que je veux "thumbifier".
Afficher les 22 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.