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}."); } }
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"); } }
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!