Maison  >  Article  >  développement back-end  >  Comment puis-je conserver les proportions de l’image lors de la création de vignettes ?

Comment puis-je conserver les proportions de l’image lors de la création de vignettes ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-09 07:53:02827parcourir

How do I maintain image proportions when creating thumbnails?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn