Lors de la création d'une image d'appel de page d'accueil, il est parfois nécessaire d'obtenir une image de taille fixe, car la position de l'image de la page d'accueil est généralement spécifiée par le concepteur. S'il s'agit d'appeler l'image de la dernière version, car on ne sait pas laquelle. proportion de l'image que le client téléchargera, donc parfois, il n'y a aucun moyen de déterminer la proportion de l'image. Les rédacteurs de pages frontales utilisent généralement une méthode de fixation de la hauteur et de la largeur de l'élément img pour contrôler le débordement de l'image. Cependant, si la proportion de l'image n'est pas la proportion requise, l'image sera déformée après avoir été appelée. Cela affectera grandement la beauté de la page. Une solution consiste à la redimensionner en fonction de la proportion de l'image originale. L'image mise à l'échelle aura inévitablement des espaces vides. Remplissez les espaces vides de couleur. De cette façon, même si l'image ne sera pas déformée, il y aura beaucoup de distorsion, par exemple, si l'utilisateur envoie une image très. grand mais a une largeur moyenne, et si elle est compressée en une image 1:1, alors l'image ne sera fondamentalement pas visible après compression.
Ma solution ici est de recadrer n'importe quelle image à une taille fixe, l'image ne sera pas déformée et l'espace vide sera étiré et rempli. L'image sera toujours remplie sans espace vide. Les amis qui ont utilisé bcastr doivent savoir que bcastr. garantit que l'appel d'image ne sera pas déformé, pour un cadre d'image de sortie de taille fixe, l'image source présente les situations suivantes :
1 : La hauteur et la largeur de l'image à afficher sont inférieures à la hauteur et à la largeur de l'image source, écrites sous la forme de jugement $new_width<$src_width && $new_height<$src_width
2 : La hauteur et la largeur de l'image à afficher sont supérieures à la hauteur et à la largeur de l'image d'origine, écrite sous la forme de jugement $new_width>$src_width && $new_height>$src_width
3 : Excluez les deux types 1 et 2, c'est-à-dire la situation de zoom avant et arrière en même temps plus le jugement d'égalité Pour 1 et 2, les codes de traitement des fonctions sont exactement les mêmes, ils peuvent donc être résumés. en une seule instruction de traitement
pour donner le code d'implémentation PHP
<?php
/*
*Description : La fonction consiste à recadrer une image en une image de n'importe quelle taille sans déformer l'image.
* Description du paramètre : saisissez le nom de fichier de l'image à traiter, générez le nom du fichier de sauvegarde de la nouvelle image, générez la largeur de la nouvelle image et générez la hauteur de la nouvelle image.
* écrit par smallchicken
* heure 2008-12-18
*/
// Obtenez une image de n'importe quelle taille, étirez les parties manquantes, pas de déformation, pas d'espace vide
function my_image_resize($src_file, $dst_file, $new_width, $new_height) {
si($nouvelle_largeur <1 || $nouvelle_hauteur <1) {
echo "Erreur de largeur ou de hauteur des paramètres !";
sortie();
}
si(!file_exists($src_file)) {
echo $src_file "n'existe pas !";
sortie();
}
//Type d'image
$type=exif_imagetype($src_file);
$support_type=array(IMAGETYPE_JPEG , IMAGETYPE_PNG , IMAGETYPE_GIF);
if(!in_array($type, $support_type,true)) {
echo "ce type d'image ne prend pas en charge ! ne prend en charge que les formats jpg, gif ou png";
sortie();
}
//Charger l'image
commutateur($type) {
cas IMAGETYPE_JPEG :
$src_img=imagecreatefromjpeg($src_file);
casser;
cas IMAGETYPE_PNG :
$src_img=imagecreatefrompng($src_file);
casser;
cas IMAGETYPE_GIF :
$src_img=imagecreatefromgif($src_file);
casser;
défaut:
echo "Erreur de chargement de l'image !";
sortie();
}
$w=imagesx($src_img);
$h=imagesy($src_img);
$ratio_w=1,0 * $new_width / $w ;
$ratio_h=1,0 * $nouvelle_hauteur / $h ;
$rapport=1,0 ;
// La hauteur et la largeur de l'image générée sont plus petites ou plus grandes que celles d'origine. Le principe est d'agrandir d'un grand rapport et de réduire d'un grand rapport (le rapport réduit sera plus petit).
if( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1)) {
si($ratio_w < $ratio_h) {
$ratio = $ratio_h ; // Cas 1, le rapport de largeur est plus petit que la direction de la hauteur, recadrer ou agrandir selon la norme du rapport de hauteur
}autre {
$ratio = $ratio_w ;
}
// Définir une image temporaire intermédiaire dont le rapport hauteur/largeur répond exactement aux exigences cibles
$inter_w=(int)($new_width / $ratio);
$inter_h=(int) ($new_height / $ratio);
$inter_img=imagecreatetruecolor($inter_w , $inter_h);
imagecopy($inter_img, $src_img, 0,0,0,0,$inter_w,$inter_h);
// Génère une image temporaire avec la longueur de côté maximale comme image cible $ratio ratio
//Définir une nouvelle image
$new_img=imagecreatetruecolor($new_width,$new_height);
imagecopyresampled($new_img,$inter_img,0,0,0,0,$new_width,$new_height,$inter_w,$inter_h);
commutateur($type) {
cas IMAGETYPE_JPEG :
imagejpeg($new_img, $dst_file,100); // Stocker l'image
casser;
cas IMAGETYPE_PNG :
imagepng($new_img,$dst_file,100);
casser;
cas IMAGETYPE_GIF :
imagegif($new_img,$dst_file,100);
casser;
défaut:
casser;
}
} // fin si 1
// 2 Un côté de l'image cible est plus grand que l'image d'origine et un côté est plus petit que l'image d'origine. Agrandissez d'abord l'image ordinaire, puis recadrez-la.
// =if( ($ratio_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1) )
autre{
$ratio=$ratio_h>$ratio_w? $ratio_h : $ratio_w; //Prendre la valeur avec le plus grand rapport
// Définir une grande image au milieu, la hauteur ou la largeur de l'image est égale à l'image cible, puis agrandir l'image originale
$inter_w=(int)($w * $ratio);
$inter_h=(int) ($h * $ratio);
$inter_img=imagecreatetruecolor($inter_w , $inter_h);
// Recadrer l'image originale après l'avoir mise à l'échelle
imagecopyresampled($inter_img,$src_img,0,0,0,0,$inter_w,$inter_h,$w,$h);
//Définir une nouvelle image
$new_img=imagecreatetruecolor($new_width,$new_height);
imagecopy ($ new_img, $ inter_img, 0,0,0,0, $ new_width, $ new_height);
commutateur($type) {
cas IMAGETYPE_JPEG :
imagejpeg($new_img, $dst_file,100); // Stocker l'image
casser;
cas IMAGETYPE_PNG :
imagepng($new_img,$dst_file,100);
casser;
cas IMAGETYPE_GIF :
imagegif($new_img,$dst_file,100);
casser;
défaut:
casser;
}
}//if3
}// fin de la fonction
?>