Bagaimanakah saya mengekalkan perkadaran imej semasa membuat lakaran kenit?

Patricia Arquette
Lepaskan: 2024-11-09 07:53:02
asal
821 orang telah melayarinya

How do I maintain image proportions when creating thumbnails?

Mencipta Lakaran Kecil: Mengekalkan Perkadaran Imej

Dalam pertanyaan anda, anda menyasarkan untuk mencipta lakaran kecil daripada imej yang dimuat naik, memastikan ia mengekalkan aspeknya nisbah. Mari kita atasi perkara ini secara terperinci:

Kepentingan Nisbah Aspek

Memelihara nisbah bidang imej adalah penting untuk mengekalkan bentuk asalnya dan mengelakkan herotan. Tanpa mengekalkan perkadaran, lakaran kenit boleh kelihatan terjepit atau diregangkan, menjejaskan integriti visual imej.

Jana Imej Kecil Menggunakan Imagick

Untuk menjana lakaran kecil yang menghormati aspek imej nisbah, pertimbangkan untuk menggunakan perpustakaan Imagick, yang menyediakan manipulasi imej lanjutan fungsi. Berikut ialah contoh fungsi:

/**
 * 
 * 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}.");
    }
}
Salin selepas log masuk

Fungsi ini menggunakan kaedah lakaran kenitImej untuk menjana lakaran kecil dengan lebar dan ketinggian yang ditentukan, sambil mengekalkan nisbah bidang asal.

Penjanaan Lakaran Kecil Alternatif

Sebagai alternatif, anda boleh menggunakan perpustakaan GD untuk membuat lakaran kecil. Pendekatan ini memerlukan lebih banyak pengiraan manual, kerana anda perlu menentukan dimensi yang sesuai untuk mengekalkan nisbah bidang imej.

Berikut ialah contoh fungsi yang menunjukkan cara membuat lakaran kecil menggunakan pustaka 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");
    }
}
Salin selepas log masuk

Menggunakan salah satu daripada fungsi ini akan memberikan anda lakaran kecil yang mengekalkan nisbah bidang imej asal.

Atas ialah kandungan terperinci Bagaimanakah saya mengekalkan perkadaran imej semasa membuat lakaran kenit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan