Maison > Article > développement back-end > Comment puis-je conserver les proportions de l’image lors de la création de vignettes ?
Création de miniatures : conserver les proportions de l'image
Dans votre requête, vous souhaitez créer une miniature à partir d'une image téléchargée, en vous assurant qu'elle conserve son aspect rapport. Abordons cela en détail :
L'importance du rapport hauteur/largeur
Préserver le rapport hauteur/largeur d'une image est crucial pour conserver sa forme d'origine et éviter toute distorsion. Sans conserver les proportions, une vignette peut apparaître écrasée ou étirée, compromettant l'intégrité visuelle de l'image.
Générer des vignettes à l'aide d'Imagick
Pour générer une vignette qui respecte l'aspect de l'image ratio, envisagez d’utiliser la bibliothèque Imagick, qui fournit des fonctions avancées de manipulation d’images. Voici un exemple de fonction :
/** * * Generate Thumbnail using Imagick class * * @param string $img * @param string $width * @param string $height * @param int $quality * @return boolean on true * @throws Exception * @throws ImagickException */ function generateThumbnail($img, $width, $height, $quality = 90) { if (is_file($img)) { $imagick = new Imagick(realpath($img)); $imagick->setImageFormat('jpeg'); $imagick->setImageCompression(Imagick::COMPRESSION_JPEG); $imagick->setImageCompressionQuality($quality); $imagick->thumbnailImage($width, $height, false, false); $filename_no_ext = reset(explode('.', $img)); if (file_put_contents($filename_no_ext . '_thumb' . '.jpg', $imagick) === false) { throw new Exception("Could not put contents."); } return true; } else { throw new Exception("No valid image provided with {$img}."); } }
Cette fonction utilise la méthode thumbnailImage pour générer une vignette avec la largeur et la hauteur spécifiées, tout en préservant les proportions d'origine.
Génération alternative de vignettes
Vous pouvez également utiliser la bibliothèque GD pour créer des vignettes. Cette approche nécessite davantage de calculs manuels, car vous devez déterminer les dimensions appropriées pour conserver les proportions de l'image.
Voici un exemple de fonction qui montre comment créer des vignettes à l'aide de la bibliothèque GD :
function makeThumbnails($updir, $img, $id) { $thumbnail_width = 134; $thumbnail_height = 189; $thumb_beforeword = "thumb"; $arr_image_details = getimagesize("$updir" . $id . '_' . "$img"); // pass id to thumb name $original_width = $arr_image_details[0]; $original_height = $arr_image_details[1]; if ($original_width > $original_height) { $new_width = $thumbnail_width; $new_height = intval($original_height * $new_width / $original_width); } else { $new_height = $thumbnail_height; $new_width = intval($original_width * $new_height / $original_height); } $dest_x = intval(($thumbnail_width - $new_width) / 2); $dest_y = intval(($thumbnail_height - $new_height) / 2); if ($arr_image_details[2] == IMAGETYPE_GIF) { $imgt = "ImageGIF"; $imgcreatefrom = "ImageCreateFromGIF"; } if ($arr_image_details[2] == IMAGETYPE_JPEG) { $imgt = "ImageJPEG"; $imgcreatefrom = "ImageCreateFromJPEG"; } if ($arr_image_details[2] == IMAGETYPE_PNG) { $imgt = "ImagePNG"; $imgcreatefrom = "ImageCreateFromPNG"; } if ($imgt) { $old_image = $imgcreatefrom("$updir" . $id . '_' . "$img"); $new_image = imagecreatetruecolor($thumbnail_width, $thumbnail_height); imagecopyresized($new_image, $old_image, $dest_x, $dest_y, 0, 0, $new_width, $new_height, $original_width, $original_height); $imgt($new_image, "$updir" . $id . '_' . "$thumb_beforeword" . "$img"); } }
L'utilisation de l'une ou l'autre de ces fonctions vous fournira des vignettes qui conservent le rapport hauteur/largeur de l'image d'origine.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!