Наборы камер 20 лучших камерофонов — инфографика (осень 2024)
Наборы камер 20 лучших камерофонов — инфографика (осень 2024)На дворе октябрь, а значит скоро на нас прольётся ливень из новых Android-флагманов. Уже совсем скоро свои «топчики» покажут OPPO, Vivo, Xiaomi, Honor, OnePlus, iQOO и многие другие. Перед тем, как это случится, нам стоит обновить нашу инфографику по тому, какие комплекты камер стоят в лучших камерофонах планеты. Предыдущий раз мы публиковали её весной, и с тех пор вышло немало новых моделей. По традиции, начнём с объяснения того, что и зачем мы рисуем.
Зачем вообще смартфонам больше одной камеры? Не считая всяких заглушек, всё сводится к тому, чтобы одинаково хорошо снимать с разным уровнем зума. Именно это мы и визуализируем. Для каждого смартфона показано, с каким реальным разрешением снимает камера на каждом уровне зума — от 0,5х до 12,5х. Чем толще полоска, тем выше разрешение. То есть если полоска в какой-то части графика становится узкой, то у телефона наверняка проблемы со съёмкой с таким зумом. Оранжевым показано разрешение после бининга, серым — до него (но не больше 24 Мп, чтобы графики не были слишком толстыми с этими вашими 200-Мп камерами).
Ну а слева от графика показаны сами модули, чтобы вы могли сравнить их размеры. Прямоугольник — это сенсор, а кружочек — входное отверстие камеры, её «глазок». Толщина кружочка показывает, насколько сильное боке делает камера. Итак, смотрим на характеристики лучших камерофонов (отсортированы по общей площади сенсоров):let getEqFocLen = (camera) => 43.267 * camera.focLen / (Math.sqrt(camera.res/12)*5 * camera.pixSize);let phones = [ { name: "OPPO Find X7 Ultra", cameras: [ {res: 50, realRes: 12.5, pixSize: 0.80, focLen: 2.59, fNum: 2.00}, {res: 50, realRes: 12.5, pixSize: 1.60, focLen: 8.67, fNum: 1.80}, {res: 50, realRes: 12.5, pixSize: 1.00, focLen:15.38, fNum: 2.60}, {res: 50, realRes: 12.5, pixSize: 0.70, focLen:22.36, fNum: 4.30} ] }, { name: "Vivo X100 Ultra", cameras: [ {res: 50, realRes: 12.5, pixSize: 0.80, focLen: 2.59, fNum: 2.20}, {res: 50, realRes: 12.5, pixSize: 1.60, focLen: 8.67, fNum: 1.75}, {res:200, realRes: 12.5, pixSize: 0.56, focLen:22.48, fNum: 2.67} ] }, { name: "Xiaomi 14 Ultra", cameras: [ {res: 50, realRes: 12.5, pixSize: 0.70, focLen: 2.03, fNum: 1.80}, {res: 50, realRes: 12.5, pixSize: 1.60, focLen: 8.72, fNum: 1.60}, {res: 50, realRes: 12.5, pixSize: 0.70, focLen:12.28, fNum: 1.80}, {res: 50, realRes: 12.5, pixSize: 0.70, focLen:19.40, fNum: 2.50} ] }, { name: "Huawei Pura 70 Ultra", cameras: [ {res: 40, realRes: 10.0, pixSize: 0.70, focLen: 1.95, fNum: 2.20}, {res: 50, realRes: 12.5, pixSize: 1.60, focLen: 8.50, fNum: 1.60}, {res: 50, realRes: 12.5, pixSize: 0.70, focLen:15.00, fNum: 2.10} ] }, { name: "Honor Magic 6 Pro", cameras: [ {res: 50, realRes: 12.5, pixSize: 0.61, focLen: 1.82, fNum: 2.00}, {res: 50, realRes: 12.5, pixSize: 1.20, focLen: 6.83, fNum: 1.40}, {res:180, realRes:11.25, pixSize: 0.56, focLen:15.38, fNum: 2.60} ] }, { name: "Samsung Galaxy S24 Ultra", cameras: [ {res: 12, realRes: 12.0, pixSize: 1.40, focLen: 2.20, fNum: 2.20}, {res:200, realRes: 12.5, pixSize: 0.60, focLen: 6.30, fNum: 1.70}, {res: 10, realRes: 10.0, pixSize: 1.12, focLen: 7.90, fNum: 2.40}, {res: 50, realRes: 12.5, pixSize: 0.70, focLen:18.60, fNum: 3.40} ] }, { name: "ZTE Nubia Z60 Ultra LV", cameras: [ {res: 50, realRes: 12.5, pixSize: 1.00, focLen: 4.40, fNum: 1.80}, {res: 50, realRes: 12.5, pixSize: 1.00, focLen: 8.29, fNum: 1.59}, {res: 64, realRes: 16.0, pixSize: 0.70, focLen:15.98, fNum: 3.30} ] }, { name: "OnePlus 12", cameras: [ {res: 48, realRes: 12.0, pixSize: 0.80, focLen: 2.62, fNum: 2.20}, {res: 50, realRes: 12.5, pixSize: 1.12, focLen: 6.06, fNum: 1.60}, {res: 64, realRes: 16.0, pixSize: 0.70, focLen:13.30, fNum: 2.60} ] }, { name: "iQOO 12 Pro", cameras: [ {res: 50, realRes: 12.5, pixSize: 0.64, focLen: 2.32, fNum: 2.00}, {res: 50, realRes: 12.5, pixSize: 1.20, focLen: 6.45, fNum: 1.68}, {res: 64, realRes: 16.0, pixSize: 0.70, focLen:13.30, fNum: 2.57} ] }, { name: "Motorola Edge 50 Ultra", cameras: [ {res: 50, realRes: 12.5, pixSize: 0.64, focLen: 1.83, fNum: 2.00}, {res: 50, realRes: 12.5, pixSize: 1.20, focLen: 6.57, fNum: 1.60}, {res: 64, realRes: 16.0, pixSize: 0.70, focLen:13.30, fNum: 2.40} ] }, { name: "8849 Tank 3 Pro", cameras: [ {res: 50, realRes: 12.5, pixSize: 0.64, focLen: 2.35, fNum: 2.20}, {res:200, realRes: 12.5, pixSize: 0.56, focLen: 6.16, fNum: 1.65}, {res: 64, realRes: 64.0, pixSize: 0.70, focLen: 4.71, fNum: 1.79, additional: true}, {res: 8, realRes: 8.0, pixSize: 1.00, focLen: 7.48, fNum: 2.40}, ] }, { name: "Google Pixel 9 Pro XL", cameras: [ {res: 48, realRes: 12.0, pixSize: 0.70, focLen: 2.02, fNum: 1.70}, {res: 50, realRes: 12.5, pixSize: 1.20, focLen: 6.90, fNum: 1.68}, {res: 48, realRes: 12.0, pixSize: 0.70, focLen:17.91, fNum: 2.80} ] }, { name: "Apple iPhone 16 Pro Max", cameras: [ {res: 48, realRes: 12.0, pixSize: 0.70, focLen: 2.22, fNum: 2.20}, {res: 48, realRes: 12.0, pixSize: 1.22, focLen: 6.86, fNum: 1.78}, {res: 12, realRes: 12.0, pixSize: 1.12, focLen:15.66, fNum: 2.80} ] }, { name: "Sony Xperia 1 VI", cameras: [ {res: 12, realRes: 12.0, pixSize: 1.40, focLen: 2.68, fNum: 2.20}, {res: 48, realRes: 12.0, pixSize: 1.12, focLen: 6.08, fNum: 1.90}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:10.30, fNum: 2.30}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:10.50, fNum: 2.30, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:10.70, fNum: 2.35, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:10.90, fNum: 2.40, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:11.10, fNum: 2.45, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:11.30, fNum: 2.50, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:11.50, fNum: 2.55, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:11.70, fNum: 2.60, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:11.90, fNum: 2.65, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:12.10, fNum: 2.70, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:12.30, fNum: 2.75, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:12.50, fNum: 2.80, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:12.75, fNum: 2.85, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:13.00, fNum: 2.90, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:13.25, fNum: 2.95, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:13.50, fNum: 3.00, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:13.75, fNum: 3.05, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:14.00, fNum: 3.10, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:14.25, fNum: 3.15, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:14.50, fNum: 3.20, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:14.75, fNum: 3.25, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:15.00, fNum: 3.30, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:15.33, fNum: 3.35, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:15.66, fNum: 3.40, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:16.00, fNum: 3.41, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:16.33, fNum: 3.42, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:16.66, fNum: 3.43, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:17.00, fNum: 3.44, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:17.33, fNum: 3.45, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:17.66, fNum: 3.46, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:18.00, fNum: 3.47, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:18.33, fNum: 3.48, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:18.67, fNum: 3.49, hidden: true}, {res: 12, realRes: 12.0, pixSize: 1.00, focLen:19.01, fNum: 3.50, hidden: true} ] }, { name: "Realme GT6", cameras: [ {res: 8, realRes: 8.0, pixSize: 1.12, focLen: 1.68, fNum: 2.20}, {res: 50, realRes: 12.5, pixSize: 1.12, focLen: 6.06, fNum: 1.69}, {res: 50, realRes: 12.5, pixSize: 0.64, focLen: 7.10, fNum: 2.00} ] }, { name: "Tecno Camon 30 Premier", cameras: [ {res: 50, realRes: 12.5, pixSize: 0.64, focLen: 2.13, fNum: 2.20}, {res: 50, realRes: 12.5, pixSize: 1.00, focLen: 5.59, fNum: 1.88}, {res: 50, realRes: 12.5, pixSize: 0.64, focLen:10.68, fNum: 2.15} ] }, { name: "ASUS Zenfone 11 Ultra", cameras: [ {res: 13, realRes: 13.0, pixSize: 1.12, focLen: 2.22, fNum: 2.20}, {res: 50, realRes: 12.5, pixSize: 1.00, focLen: 5.53, fNum: 1.90}, {res: 32, realRes: 8.0, pixSize: 0.70, focLen: 8.56, fNum: 2.40} ] }, { name: "HTC U24 Pro", cameras: [ {res: 8, realRes: 8.0, pixSize: 1.12, focLen: 1.67, fNum: 2.20}, {res: 50, realRes: 12.5, pixSize: 1.00, focLen: 5.59, fNum: 1.90}, {res: 50, realRes: 12.5, pixSize: 0.64, focLen: 7.07, fNum: 2.00} ] }, { name: "HMD Skyline", cameras: [ {res: 13, realRes: 13.0, pixSize: 1.12, focLen: 2.10, fNum: 2.40}, {res:108, realRes: 12.0, pixSize: 0.64, focLen: 5.24, fNum: 1.70}, {res: 50, realRes: 12.5, pixSize: 0.64, focLen: 7.07, fNum: 1.98} ] }, { name: "Meizu 21 Pro", cameras: [ {res: 13, realRes: 13.0, pixSize: 1.12, focLen: 2.22, fNum: 2.02}, {res: 50, realRes: 12.5, pixSize: 1.00, focLen: 5.66, fNum: 1.90}, {res: 10, realRes: 10.0, pixSize: 1.12, focLen: 8.51, fNum: 2.40} ] }];let phoneContainer = document.getElementById("phoneContainer");for (let i = 0; i < phones.length; i++) { let phone = phones[i]; let phoneBlock = document.createElement("div"); phoneBlock.className = "phoneBlock"; let title = document.createElement("p"); title.innerText = phone.name; title.className = "title"; phoneBlock.appendChild(title); let graph = document.createElement("div"); graph.className = "graph"; phoneBlock.appendChild(graph); let currentCam = -1, skip = 0, maxRealZoom; for (let j = 11; j < 320; j++) { if (currentCam < phone.cameras.length - 1 && getEqFocLen(phone.cameras[currentCam+1]) < j) currentCam++; let kResAtJ, kRealResAtJ, camera, eqFocLen, fullResAtJ = 0, realResAtJ = 0; for (let k = 0; k fullResAtJ) fullResAtJ = kResAtJ; if (kRealResAtJ > realResAtJ) realResAtJ = kRealResAtJ; } let full = document.createElement("div"); full.className = "full column"; full.style.height = Math.min(fullResAtJ, 24) * 3 + "px"; full.style.width = (Math.log(j+1) - Math.log(j)) * 145 + "px"; let real = document.createElement("div"); real.className = "real column"; real.style.height = Math.min(realResAtJ, 24) * 3 + "px"; real.style.width = (Math.log(j+1) - Math.log(j)) * 145 + "px"; real.style.top = (Math.min(fullResAtJ, 24) - Math.min(realResAtJ, 24)) * 1.5 + "px"; full.appendChild(real); graph.appendChild(full); if ([12, 24, 48, 120, 240].includes(j+1)) { let border = document.createElement("div"); border.className = "border"; border.innerHTML = "" + (j+1)/24 + "x"; graph.appendChild(border); } if (realResAtJ > 2) maxRealZoom = j; } let sensors = document.createElement("div"); sensors.className = "sensors"; phoneBlock.appendChild(sensors); let totalSize = 0; for (let j = 0; j < phone.cameras.length; j++) { let camera = phone.cameras[j]; if (camera.hidden) continue; let sensorDiag = Math.sqrt(camera.res/12)*5 * camera.pixSize; let sensorH = sensorDiag * 0.8; let sensorW = sensorDiag * 0.6; let eyeSize = camera.focLen / camera.fNum; let eqFocLen = getEqFocLen(camera); let bokeh = camera.focLen * camera.focLen / eqFocLen / camera.fNum; let sensor = document.createElement("div"); sensor.className = "sensor"; if (camera.additional) sensor.className += " additional" sensor.style.height = sensorH * 6 + "px"; sensor.style.width = sensorW * 6 + "px"; let eye = document.createElement("div"); eye.className = "eye"; eye.style.height = eyeSize * 6 + "px"; eye.style.width = eyeSize * 6 + "px"; eye.style.left = (sensorW - eyeSize) * 3 + "px"; eye.style.top = (sensorH - eyeSize) * 3 + "px"; eye.style.borderWidth = bokeh * 4 + "px"; sensor.appendChild(eye); sensors.appendChild(sensor); totalSize += camera.res * camera.pixSize * camera.pixSize; } console.log(phone.name + ": " + Math.round(maxRealZoom / 0.24)/100 + "x, " + Math.round(totalSize) + " mm2"); phoneContainer.appendChild(phoneBlock);}#phoneContainer * {margin: 0; padding: 0; box-sizing: border-box;}#phoneContainer .phoneBlock {width: 725px; height: 150px; margin: 10px; border-bottom: 1px solid lightgray;}#phoneContainer .title {font-weight: bold; text-align: center; line-height: 30px; height: 30px; width: 100%;}#phoneContainer .sensors {width: 32%; height: 100px; line-height: 100px;}#phoneContainer .sensor {margin-right: 20px; display: inline-block; vertical-align: middle; background: linear-gradient(45deg, rgba(255,192,0,1) 0%, rgba(0,176,240,1) 17%, rgba(151,81,203,1) 35%, rgba(255,192,0,1) 100%);}#phoneContainer .sensor.additional {background: linear-gradient(45deg, rgba(192,192,192,1) 0%, rgba(176,176,176,1) 17%, rgba(81,81,81,1) 35%, rgba(192,192,192,1) 100%);}#phoneContainer .eye {border: solid black; border-radius: 100px; position: relative;}#phoneContainer .graph {width: 68%; height: 100px; line-height: 100px; float: right;}#phoneContainer .full {background-color: lightgrey; display: inline-block; vertical-align: middle}#phoneContainer .real {background-color: orange; position: relative;}#phoneContainer .border {display: inline-block; z-index: 2; position: absolute; height: 100px; border-left: 0.1px dashed lightgray;}#phoneContainer .border p {font-size: 12px; color: lightgray; margin-left: -7px; margin-top: 57px;}Из новичков ярко выделается Vivo X100 Ultra: мало того, что он оснащён дюймовой основной камерой, так ещё и гигантский телевик с огромным входным отверстием не оставляет конкурентам никаких шансов на дальнем зуме. Правда, 200 Мп бинятся в 12 Мп, так что цветовое разрешение у него всё-таки послабее, чем у моделей в двумя телевиками — такие есть у OPPO, Xiaomi и Samsung. Также среди конкурентов выдяляются Nubia Z60 Ultra LV с необычным набором камер с примерно одинаковыми по размерам сенсорам и Sony Xperia 1 VI с подвижным телевиком (который, правда, ужасно снимает на практике).
Приятный момент — практически не осталось моделей, не предлагающих ничего между 1х и 5х, сейчас это лишь Pixel и iPhone. Такие смартфоны вынуждены снимать в 4х-4,9х с очень сильным кропом, и разрешение может составлять всего 2 Мп (0,5 Мп после бининга). Модули камер, в которых нет таких сильных разрывов, предпочтительнее. Впрочем, не стоит думать, что визуализированные характеристики полностью определяют качество фото — многое зависит от алгоритмов, ISP, качества оптики, наличия и эффективности оптической стабилизации, а также многих других параметров. Поэтому оценивать смартфоны стоит по реальным фото, а наша инфографика — это скорее возможность понять, как вместе сочетаются разные характеристики сенсоров и оптики в камерах смартфонов.
Набор камер какого из смартфонов кажется вам наиболее удачным? Расскажите в комментариях, а мы через полгода вернёмся с новой инфографикой. Кстати, предложения по её улучшению тоже можете оставить!