ホームページ > バックエンド開発 > PHPチュートリアル > サムネイルを作成するときに画像の比率を維持するにはどうすればよいですか?

サムネイルを作成するときに画像の比率を維持するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-09 07:53:02
オリジナル
883 人が閲覧しました

How do I maintain image proportions when creating thumbnails?

サムネイルの作成: 画像の縦横比の維持

クエリでは、アップロードされた画像からサムネイルを作成し、その側面を確実に保持することを目的としています。比率。これについて詳しく説明します。

アスペクト比の重要性

画像のアスペクト比を維持することは、元の形状を維持し、歪みを防ぐために非常に重要です。比率を維持しないと、サムネイルが押しつぶされたり引き伸ばされたりして、画像の視覚的な整合性が損なわれる可能性があります。

Imagick を使用してサムネイルを生成する

画像の縦横比を考慮したサムネイルを生成するには比率を考慮した場合は、高度な画像操作機能を提供する Imagick ライブラリの利用を検討してください。関数の例を次に示します。

/**
 * 
 * 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}.");
    }
}
ログイン後にコピー

この関数は、thumbnailImage メソッドを使用して、元のアスペクト比を維持しながら、指定された幅と高さのサムネイルを生成します。

代替サムネイル生成

また、GD ライブラリを使用してサムネイルを作成することもできます。このアプローチでは、画像のアスペクト比を維持するために適切な寸法を決定する必要があるため、より多くの手動計算が必要になります。

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");
    }
}
ログイン後にコピー

これらの機能のいずれかを使用すると、元の画像の縦横比を維持したサムネイルが提供されます。

以上がサムネイルを作成するときに画像の比率を維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート