Как рассчитать объем памяти, занимаемый изображением

Обновлено: 21.11.2024

Узнайте, как Photoshop вычисляет размер файла вашего изображения, почему размер изображения меняется при изменении количества пикселей и как легко определить размер файла самостоятельно!

В предыдущем уроке этой серии, посвященном размеру изображения, мы узнали, как изменить размер изображения для отправки по электронной почте и публикации в Интернете с помощью команды «Размер изображения» в Photoshop. В том уроке мы увидели, что при изменении количества пикселей в изображении менялся и размер изображения в мегабайтах. Чем больше пикселей, тем больше размер файла, а чем меньше пикселей, тем меньше размер файла.

Но как это работает? Какое отношение количество пикселей в изображении имеет к размеру файла? В этом кратком уроке я покажу вам, как именно связаны пиксели и размер файла, и какую важную роль играют цвета на вашем изображении. К концу вы узнаете, как легко определить размер изображения самостоятельно, и вы будете точно знать, откуда берется этот номер размера изображения в диалоговом окне «Размер изображения» в Photoshop!

Чтобы продолжить, вы можете открыть любое изображение в Photoshop. Я буду использовать это фото, загруженное из Adobe Stock:

Это пятый урок из моей серии «Изменение размера изображений в Photoshop».

Начнем!

Где найти текущий размер изображения

Чтобы просмотреть текущий размер изображения, перейдите в меню "Изображение" в строке меню и выберите "Размер изображения":

При этом открывается диалоговое окно «Размер изображения» Photoshop с окном предварительного просмотра слева и параметрами размера изображения справа. Окно предварительного просмотра было добавлено в Photoshop CC:

Текущий размер как в пикселях (px), так и в мегабайтах (M) находится вверху. Число рядом со словами «Размер изображения» показывает, сколько места изображение занимает в памяти вашего компьютера. А под ним, рядом со словом Размеры, указаны ширина и высота изображения в пикселях.

В моем случае мое изображение занимает 42,1 МБ памяти. И он имеет ширину 4700 пикселей и высоту 3133 пикселей. Через мгновение я покажу, как именно связаны размер изображения и размеры в пикселях:

Как пиксели и цвет влияют на размер изображения

Чтобы действительно понять, как количество пикселей в изображении влияет на размер файла, нам также необходимо знать, как Photoshop отображает цвета на вашем изображении. Это потому, что сами по себе пиксели не определяют размер файла. Большая часть размера зависит от того, как Photoshop отображает цвет каждого пикселя.

В большинстве полноцветных изображений используется так называемый цвет RGB. RGB означает «красный, зеленый и синий», которые являются тремя основными цветами света. Каждый цвет, который вы видите на своем изображении, получается путем смешивания красного, зеленого и синего вместе.

Цветовые каналы Photoshop

Photoshop смешивает красный, зеленый и синий цвета с помощью цветовых каналов. Чтобы увидеть, как это работает, я на мгновение закрою диалоговое окно «Размер изображения», нажав кнопку «Отмена»:

Затем я переключусь на панель «Каналы», которую вы найдете рядом с панелью «Слои». И здесь мы видим красный, зеленый и синий каналы, которые использует Photoshop. Канал RGB вверху на самом деле не является каналом. Он представляет собой полноцветное изображение, которое мы видим на экране:

Как цветовые каналы влияют на размер изображения?

Каждый из трех цветовых каналов (красный, зеленый и синий) занимает в памяти ровно 1 байт для каждого пикселя изображения.Например, если ваше изображение содержит 10 пикселей, каждому пикселю потребуется 1 байт для красного, 1 байт для зеленого и 1 байт для синего, всего 3 байта.

Конечно, большинство изображений содержат миллионы пикселей, а не только 10. Но объем памяти, необходимый каждому пикселю, не меняется. На каждый пиксель всегда приходится 3 байта; один для красного, один для зеленого и один для синего.

Как рассчитать размер файла

Итак, чтобы определить размер файла изображения, все, что нам нужно сделать, это взять общее количество пикселей, умножить его на 3, и мы получим ответ! Вот как это сделать.

Шаг 1. Найдите общее количество пикселей в изображении

Во-первых, нам нужно общее количество пикселей, и мы находим его в диалоговом окне "Размер изображения". Я снова открою его, вернувшись в меню «Изображение» и выбрав «Размер изображения»:

И снова мы видим в разделе Размеры, что мое изображение имеет ширину 4700 пикселей и высоту 3133 пикселей:

Чтобы найти общее количество пикселей, умножьте ширину и высоту. В этом случае 4700 пикселей x 3133 пикселя = 14 725 100 пикселей. Это очень много пикселей. Но, как мы узнали, количество пикселей — это еще не все.

Шаг 2. Умножьте общее количество пикселей на 3

Помните, что каждому пикселю изображения требуется 3 байта памяти; один для красного канала, один для зеленого канала и один для синего канала. Таким образом, чтобы найти общий размер файла в байтах, умножьте общее количество пикселей на 3. В моем случае 14 725 100 пикселей x 3 байта на пиксель = 44 175 300 байт.

Шаг 3. Преобразование размера изображения из байтов в килобайты

У нас есть общий размер файла в байтах. Но байт — это очень маленькая единица измерения, поэтому не очень практично указывать размер изображения в байтах. Вместо этого мы обычно говорим о размере изображения либо в килобайтах, либо, чаще, в мегабайтах.

Один килобайт равен 1024 байтам. Итак, чтобы преобразовать байты в килобайты, разделите общее количество байтов на 1024. В моем изображении 44 175 300 байтов ÷ 1024 = 43 139,94 килобайта (или КБ).

Шаг 4. Преобразование размера изображения из килобайтов в мегабайты

Даже килобайты слишком малы для измерения большинства изображений. Поэтому вместо этого мы обычно ссылаемся на размер файла в мегабайтах. Один мегабайт равен 1024 килобайтам. Таким образом, чтобы найти общий размер изображения в мегабайтах, разделите количество килобайт (43 139,94) на 1024, что даст нам 42,1 мегабайта (или МБ, хотя по какой-то причине диалоговое окно «Размер изображения» сокращает «МБ» до «М») .

И если мы снова посмотрим на диалоговое окно «Размер изображения», то увидим, что Photoshop действительно показывает мне, что размер моего изображения составляет 42,1 МБ:

Как рассчитать размер изображения — краткий обзор

И это действительно все! Чтобы определить размер изображения, выполните следующие простые действия:

<р>1. Умножьте ширину и высоту изображения в пикселях, чтобы получить общее количество пикселей.
2. Умножьте общее количество пикселей на 3, чтобы получить размер изображения в байтах.
3. Разделите количество байтов на 1024, чтобы получить размер изображения в килобайтах.
4. Разделите количество килобайт на 1024, чтобы получить размер изображения в мегабайтах.

И вот оно! В следующем уроке мы рассмотрим веб-разрешение, распространенное мнение о том, что вам нужно уменьшить разрешение изображения, прежде чем загружать его в Интернет, и как легко доказать, что это неправда!

Вы можете перейти к любому другому уроку в этой главе «Изменение размера изображений в Photoshop». Или посетите наш раздел Основы Photoshop, чтобы узнать больше!

Ссылки

Учебники

Другое

Этот калькулятор размера файла изображения поможет вам оценить размер файла несжатого растрового изображения при условии, что вы знаете разрешение изображения и его разрядность.

В этом калькуляторе вы узнаете, что такое файл изображения, что такое битовая глубина и чем отличается растровое изображение от векторного. Мы также покажем вам, как самостоятельно рассчитать размер файла изображения и как его объединение с аудиофайлом создает видеофайл. Продолжайте читать, чтобы узнать больше.

Что такое файл изображения?

Файл изображения — это цифровое представление изображения, и мы можем отобразить его на экране, таком как монитор компьютера или экран мобильного телефона. Файлы изображений содержат данные об атрибутах изображения, таких как присутствующие в нем цвета, интенсивность яркости и контрастности и многое другое. Эти данные хранятся в том, что мы называем битами. Подробнее о битах и ​​компьютерных файлах можно узнать в разделе «Размеры компьютерных файлов» нашего калькулятора времени загрузки.

Файлы изображений могут иметь множество различных форматов, которые мы можем сгруппировать в две категории: растровые и векторные изображения. Файл растрового изображения содержит массив пикселей различных цветов, расположенных в сетке для формирования изображения. Пиксели — это крошечные точки, очень похожие на маленькие стежки X в схеме вышивки крестом, как показано на сравнительном рисунке ниже.

Изображения с большим количеством пикселей, как правило, показывают больше деталей и более высокое качество, особенно при попытке увеличить это изображение. Растровое изображение с большим количеством пикселей или разрешением позволяет нам значительно увеличить изображение, прежде чем мы начнем видеть отдельные пиксели, из которых оно состоит.

С другой стороны, векторные изображения состоят из таких атрибутов, как кривые, контуры, формы, толщина линий или штрихов, цвета и т. д., которые хранятся в формулах или уравнениях. В отличие от растровых изображений, которые хранят данные для каждого пикселя изображения, векторные изображения хранят данные в виде компиляции этих уравнений, представляющих каждый из указанных атрибутов. Вы можете думать об этом как о списке математических уравнений, которые мы можем изобразить на декартовой плоскости. Отображение векторного изображения похоже на построение графика этих уравнений на декартовой плоскости каждый раз, когда мы открываем файл изображения. Эти «графики» также обновляются каждый раз, когда мы масштабируем или масштабируем векторное изображение, благодаря чему мы всегда видим плавные линии и кривые с одинаковыми цветами и деталями.

Однако этот калькулятор размера файла изображения может определять размеры файлов только растровых изображений. Атрибуты векторного изображения могут сильно различаться, точно так же, как вы можете выразить математический график с помощью множества различных математических уравнений. Также стоит отметить, что этот калькулятор размера файла изображения определяет только размеры файлов несжатых изображений. Однако с помощью этого калькулятора можно даже приблизительно определить размер сжатого файла изображения, если известна результирующая разрядность файла изображения.

Размеры файлов изображений

Два параметра определяют размер файла растрового изображения: количество пикселей в изображении и битовая глубина каждого пикселя. Чтобы определить размер файла растрового изображения, мы должны перемножить эти переменные. Каждый пиксель растрового изображения обычно занимает от 1 до 8 бит для черно-белых изображений и от 8 до 64 бит для цветных изображений. И чем больше пикселей в изображении, тем больше данных оно хранит и тем больше размер его файла.

Выборка — это получение информации об изображении и попытка точного представления его в цифровой форме с точки зрения пикселей. Мы также можем сделать это со звуками, при этом мы записываем различные значения частоты и амплитуды для создания цифрового аудиофайла. Вы можете узнать больше о сэмплировании с помощью нашего калькулятора размера аудиофайла (см. ссылку в начале этой статьи).

Как рассчитать размер файла изображения?

Теперь, когда мы знаем, что такое битовая глубина и какое значение имеют пиксели при определении размера файла изображения, давайте рассмотрим пример, чтобы понять, как вычислять размеры файла изображения. Для нашего примера возьмем изображение размером, скажем, 640 пикселей (ширина) на 480 пикселей (высота) с глубиной цвета 24 бита. Чтобы определить количество пикселей этого изображения, мы умножаем размеры изображения в пикселях. Это похоже на получение площади прямоугольника, но на этот раз в пикселях:

количество пикселей = ширина изображения в пикселях * высота изображения в пикселях

количество пикселей = 640 пикселей * 480 пикселей

количество пикселей = 307 200 пикселей

Когда речь идет о большом количестве пикселей или разрешений, мы часто можем видеть "MP", что означает "мегапиксели". Мегапиксель — это единица измерения, равная одному миллиону пикселей. Что касается нашего рассчитанного количества пикселей, мы также можем сказать, что рассматриваемое нами изображение имеет размер примерно 0,3 мегапикселя. Продолжая наши расчеты, мы можем определить размер файла нашего изображения следующим образом:

размер файла изображения = количество пикселей * битовая глубина

Размер файла изображения = 307 200 пикселей * 24 бита на пиксель

размер файла изображения = 7 372 800 бит

Размер файла изображения = 7 372 800 бит * (1 байт / 8 бит) * (1 килобайт / 1000 байт)

размер файла изображения = 921,6 КБ (килобайт)

Обратите внимание, что рассчитанный нами размер файла изображения является лишь оценкой фактического размера описанного файла изображения. К компьютерным файлам обычно прикрепляются другие данные, включая, помимо прочего, дату создания файла, имя создателя и т. д. Но пока, в качестве оценки размера файла изображения, мы можем сказать, что он составляет около 921,6 КБ. В нашем примере выше мы также использовали десятичную систему СИ для преобразования размера данных, где 1000 байт эквивалентны 1 килобайту. Вы можете узнать больше об этом в нашем калькуляторе времени загрузки.

Хотите узнать больше?

Если вы хотите изучить размеры файлов и единицы измерения, используемые в цифровых файлах, вы можете воспользоваться нашим конвертером байтов. Там вы можете вводить размеры файлов и видеть их значение в других единицах размера файлов одновременно.

Оставаться Android В процессе разработки изображения часто нуждаются в оптимизации, поскольку изображениям может легко не хватить памяти. что , Нам нужно знать , Как рассчитать размер картинки , При загрузке в память , Сколько места она занимает ?

Давайте сначала посмотрим на картинку:

Это обычное изображение в формате png. Взгляните на его конкретную информацию:

Разрешение изображения 1080 * 452, А это мы видели на компьютере png Размер изображения всего 55,8 КБ, Итак, вот вопрос:

Размер изображения, которое мы видим, составляет 55,8 КБ. Размер png изображения, размер, который он занимает в памяти, также составляет 55,8 КБ. Вы?

Важно разобраться в этом, потому что я встретил кого-то, кто сказал, что мне нужно всего несколько картинок в килобайтах, хотя в интерфейсе отображаются сотни страниц, но почему так много памяти?

поэтому нам нужно выяснить концепцию: что мы видим на компьютере в формате png или jpg формат изображения, png(jpg) просто контейнер этого изображения, они преобразуют информацию каждого пикселя исходного изображения в другой формат данных с помощью соответствующего алгоритма сжатия. Для достижения цели сжатия уменьшите размер файла изображения.

И когда мы передаем код, при загрузке этого изображения в память, сначала анализируется формат данных самого файла изображения, затем восстанавливается в растровое изображение, то есть растровый объект, растровый размер зависит от обоих данных формат пикселя и разрешение .

поэтому ** лист png возможно jpg формат изображения размер , он полностью отличается от размера загруженного в память изображения .** нельзя сказать , у меня jpg картинка 10кб, то она занимает только 10кб объем памяти , это неправильно .

что , Как рассчитать объем памяти, занимаемый картинкой ?

Особенно подробная статья о великом Боге, прикрепленная в конце, если вам интересно, можете посмотреть . Я не буду здесь так профессионально говорить, Давайте поговорим с вами по моему примерному пониманию.

Объем памяти изображений

Многие статьи в Интернете познакомят вас с Формулой расчета объема памяти, занимаемой изображением: Разрешение * Размер каждого пикселя.

это предложение , Да, да , Неправильно так говорить , я просто думаю , Если не сочетать со сценой , Немного небрежно выражать это напрямую .

остаться Android Native Bitmap В работе , В некоторых случаях , Когда изображение загружается в память, разрешение будет проходить через слой преобразования, поэтому , Хотя окончательный размер изображения все равно рассчитывается по разрешению * Размер пикселя , Но разрешение в настоящее время не является разрешением самого изображения.

Давайте проведем эксперимент. Из следующих сценариев, в которых несколько точек рассмотрения объединены друг с другом, загрузите одно и то же изображение, посмотрите на размер занимаемой памяти:

Различные источники изображений :диск 、res Ресурсный файл

Различные форматы файлов изображений: png, jpg

На рисунках показаны элементы управления разного размера

Разное оборудование системы Android

Шаблон тестового кода выглядит следующим образом:

ps: Просто упомянем здесь, Использовать растровое изображение? получитьByteCount() ? Способ получить объем памяти, занимаемый текущим изображением Конечно. api 19 Тогда есть другой способ, И когда битмап Значение размера, полученного при повторном использовании, также меняется, Эти специальные сцены не будут подробно обсуждаться, Если вам интересно, обратитесь к . Во всяком случае, я знаю здесь, Большинство сцен можно пройти? получитьByteCount() ? Объем памяти, занимаемый печатью изображений, можно использовать для проверки нашего эксперимента.

Изображение приведено выше: разрешение 1080*452 PNG Формат изображения, размер самого файла изображения 56 КБ

| Серийный номер | Помещение | Объем памяти растрового изображения |

| 1 | Картинка в res/drawable, оборудование dpi=240, оборудование 1dp=1.5px, Ширина и высота элемента управления =50dp | 4393440B(4,19 МБ) |

| 2 | Картинка в res/drawable, оборудование dpi=240, оборудование 1dp=1.5px, ширина и высота элемента управления =500dp | 4393440B(4,19 МБ) |

| 3 | Картинка в res/drawable-hdpi, оборудование dpi=240, оборудование 1dp=1.5px | 1952640B(1.86MB) |

| 4 | Картинка в res/drawable-xhdpi, оборудование dpi=240, оборудование 1dp=1.5px | 1098360B(1,05 МБ) |

| 5 | Картинка в res/drawable-xhdpi,** оборудование dpi=160,** оборудование 1dp=1px | 488160B(476,7 КБ) |

| 6 | Картинка в res/drawable-hdpi, оборудование dpi=160, оборудование 1dp=1px | 866880(846,5 КБ) |

| 7 | Картинка в res/drawable, оборудование dpi=160, оборудование 1dp=1px | 1952640B(1.86MB) |

| 8 | Изображение на диске, оборудование dpi=160, оборудование 1dp=1px | 1952640B(1.86MB) |

| 9 | Изображение на диске, оборудование dpi=240, оборудование 1dp=1.5px | 1952640B(1.86MB) |

Смотрите , Это одна и та же картина , Но в разных сценариях , Объем используемой памяти может быть разным , Детали будут проанализированы позже . Различные источники изображений перечислены в приведенной выше сцене. Различное оборудование Android. Покажите различные размеры элементов управления. Это сценарии в стадии рассмотрения. Продолжим рассматривать сценарий : Та же картинка , Сохранение в разных форматах ( Это не переименование , С помощью ps);

изображение: разрешение 1080*452 jpg Формат изображения, размер самого файла изображения 85,2 КБ

ps: То же изображение выше, только в PhotoShop. Сохранено в формате jpg

| Серийный номер | Помещение | Объем памяти растрового изображения | Объект сравнения |

| 10 | Картинка в res/drawable, оборудование dpi=240, оборудование 1dp=1.5px | 4393440B(4.19MB) | Серийный номер 1 |

| 11 | Картинка в res/drawable-hdpi, оборудование dpi=240, оборудование 1dp=1.5px | 1952640B(1.86MB) | Серийный номер 3 |

| 12 | Картинка в res/drawable-xhdpi, оборудование dpi=240, оборудование 1dp=1.5px | 1098360B(1.05MB) | Серийный номер 4 |

| 13 | Изображение на диске, оборудование dpi=240, оборудование 1dp=1.5px | 1952640B(1.86MB) | Серийный номер 9 |

Здесь перечислены несколько сценариев. Серийный номер сравниваемых в каждой сцене экспериментальных объектов также указан в конце каждой строки. Мы можем сравнить и подтвердить сами. Вы узнали. Данные совпадают. Итак, вот вывод:

Различные форматы изображений: png или jpg. Не влияет на объем памяти, занимаемый изображением

Хорошо, давайте начнем с анализа этих экспериментальных данных:

Во-первых, если в соответствии с формулой расчета размера изображения: разрешение * Размер пикселя

что , Согласно этой формуле, размер этого изображения должен быть: 1080 * 452 * 4B = 1952640B ≈ 1,86 МБ

ps: здесь размер пикселя выражается в 4 байтах. Для расчета, потому что, если не указано, система по умолчанию использует формат данных ARGB_8888 в пикселях. Другие форматы следующие:

В приведенных выше экспериментах должен быть этот размер, что, почему существуют другие размеры данных? поэтому, давайте проанализируем его один за другим:

Точка анализа 1

Сначала посмотрите на серийный номер 1,2 Эксперимент , Единственная разница между ними заключается в размере пространства, показанного на рисунке. Этот тест проводится потому, что, по мнению некоторых людей, размер пространства памяти, занимаемого изображением, связан с размером изображения, отображаемого на интерфейсе. Чем больше элемент управления дисплеем, тем больше памяти он занимает. очевидно, такое понимание неверно.

Представьте, что изображение должно быть сначала загружено в память, чтобы рисовать на элементе управления, поэтому, когда изображение хочет применить место в памяти, оно не знает размер элемента управления для отображения в это время, как может размер элемента управления влияет на объем памяти, занимаемый изображением. Если не указано заранее, вручную участвовать в процессе загрузки изображения.

Точка анализа 2

Давайте посмотрим на порядковый номер 2,3,4 Эксперимент , Разница между тремя , Просто изображение находится в разрешении В разных каталогах ресурсов внутри . Когда изображение помещается в res Когда в разных каталогах внутри , Почему размер конечного изображения, загруженного в память, отличается?

Если вы пойдете и посмотрите ? Bitmap.decodeResource() ? Исходный код. Вы обнаружите, что система загружает изображения ресурсов res в каталог. Она будет выполнять преобразование разрешения в соответствии с различными каталогами, в которых хранятся изображения. Правило преобразования:

Высота новой карты = Исходная высота * ( Оборудование dpi / Каталог соответствует dpi )

Ширина нового графика = ширине исходного * ( Оборудование dpi / Каталог соответствует dpi )

Имя каталога и dpi Соответствующее отношение выглядит следующим образом: drawable Без суффикса соответствует 160 dpi:

поэтому давайте посмотрим на серийный номер 2. Эксперимент , в соответствии с приведенной выше теорией, давайте рассчитаем объем памяти этого изображения:

Преобразованное разрешение: 1080 * (240/160) * 452 * (240/160) = 1620 * 678

очевидно, что разрешение в настоящее время не соответствует разрешению исходного изображения. После слоя преобразования, наконец, рассчитайте размер изображения:

1620 * 678 * 4 Б = 4 393 440 Б ≈ 4,19 МБ

Теперь я знаю серийный номер 2 Как вы получили результаты своего эксперимента , То же самое , Серийный номер 3 Назначение ресурса hdpi Соответствующее 240, А оборудование dpi Бывает 240, Значит разрешение после преобразования остается исходное изображение, результат будет 1,86 МБ.

размещать изображения res в разных каталогах ресурсов в . При загрузке в память сначала выполняется преобразование разрешения, затем вычисляется размер. Фактором, влияющим на преобразование, является разрешение оборудования и различные каталоги ресурсов.

Точка анализа 3

На основе точек анализа 2 Теория , Посмотрите на серийный номер 5,6,7 Эксперимент , Эти три эксперимента фактически используются для отслеживания серийного номера 2,3,4 Эксперименты сравниваются , Вот и все 6 Вывод, который мы можем сделать из эксперимента:

Одна и та же картинка , На одном устройстве , Если картинка помещена в res В разные каталоги ресурсов в , Тогда объем памяти, занимаемый картинкой, будет другим

Одна и та же картинка , Поместите ее в res В один и тот же каталог ресурсов , Но с разным разрешением dpi У устройств , Объем памяти, занимаемый картинками, также будет разным

поэтому вполне вероятно, что это произойдет, одно и то же приложение, но работающее с другим разрешением на дюйм на устройстве, тот же интерфейс, но потребляемая память может быть разной.

Почему здесь сказано, что оно может быть другим? Согласно приведенной выше теории, Та же картинка, То же, что и в каталоге, Но это другое оборудование dpi, Очевидно, преобразование разрешения другое, Потребление памяти должно быть другим, Зачем использовать поговорка, что это возможно ?

эммм, продолжайте смотреть на следующие точки анализа.

Точка анализа 4

Серийный номер 8,9 Эксперимент , На самом деле, я хочу проверить, будет ли это только тогда, когда источник изображения в разрешении. Будет ли преобразование разрешения в , Результаты подтверждают , Когда изображение на диске, SD Card или ,утвердить Каталог тоже хорош ,Интернет хорош (На самом деле картинки в сети наконец скачиваются на диск ),Пока это не res В оглавлении ,Тогда формула расчета памяти занято изображением, то есть в соответствии с разрешением исходного изображения * Размер пикселя.

На самом деле, пойдите и посмотрите, когда вы будете свободны Исходный код BitmapFactory , Действительно, только? декодироватьресурс() ? Метод будет внутренне основан на dpi. Выполните преобразование разрешения, другое? декодироватьXXX() ? Нет .

что , Почему в последнем разделе , В частности , Даже если одно и то же приложение, Но работает в другом dpi На устройстве , Тот же интерфейс , Но потребляемая память может быть разной . Почему вы используете его здесь? Может быть, что насчет слова ?

Это так? , Давайте подумаем. Согласно нашей теории сортировки, формула расчета размера памяти изображения: Разрешение * Размер пикселя, Тогда, если источником изображения являются слова res, нам нужно обратить внимание на то, какой каталог ресурсов является изображением. помещается в , И само оборудование значение dpi , Так как система берет рес. Ресурс изображения в файле будут преобразованы один раз в соответствии с этими двумя точками, В этом случае, Объем памяти картинки конечно отличается ?

emmm, Это зависит от ваших собственных факторов, Если вы разрабатываете приложение, Соответствующие операции с изображением выполняются через BitmapFactory Для работы, Тогда вышеуказанный вопрос можно заменить положительным выражением. Но теперь никто больше не пишет свои собственные, Github В Интернете так много мощных библиотек изображений с открытым исходным кодом, И разные библиотеки изображений с открытым исходным кодом, Внутренняя обработка загрузки изображений, Политика кэширования, Стратегии повторного использования разные.

поэтому, если вы используете библиотеку изображений с открытым исходным кодом, то сколько места занимает загрузка изображения в память, вам необходимо углубиться в библиотеку изображений с открытым исходным кодом, чтобы проанализировать ее обработку.

Поскольку в основном все библиотеки изображений с открытым исходным кодом оптимизируют работу изображений, поэтому давайте продолжим разговор об оптимизации изображений.

Оптимизация изображения

Исходя из приведенной выше теоретической основы, теперь подумайте еще раз, если изображение занимает слишком много места в памяти, чтобы оптимизировать, некоторые направления вы можете начать, это также более привлекательно.

Формула для размера памяти, занимаемой изображениями: Разрешение * Размер пикселя, Это просто в некоторых ситуациях, Например, источник изображения - res Words, Может быть, разрешение конечного изображения не разрешение исходного изображения, но, в конце концов, для компьютеров оно действительно рассчитывается по этой формуле.

поэтому, если рассматривать оптимизацию только с самой картинки, есть только два направления:

Уменьшить размер каждого пикселя

В дополнение к рассмотрению самого изображения, другие аспекты могут быть такими, как оповещение о памяти, ручная очистка, изображения, слабые ссылки и т. д.

В любом случае , Каким бы ни был объем интервью , Если вы не хотите, чтобы интервьюер оскорблял вас, не желайте этого , Только протрите и взорвите поверхность тестовых вопросов, чтобы провести всестороннюю подготовку , Конечно, в дополнение к этому, нам нужно заложить прочный фундамент в нашей повседневной жизни. Таким образом, независимо от того, какие знания у интервьюера есть, чтобы вонзить их в мертвых, Вы можете справиться с этим ~

Xiaobian будет сам через 6 лет. Опыт интервью и учебные заметки Все отсортировано в один ** 937 страниц PDF, ** И несколько качественных видеоуроков, которые я видел в процессе углубленного обучения. ** Загрузить в моем документе : Архитектура Android видео +BATJ Интервью Темы PDF+ Учебные заметки ** Пожалуйста, сделайте это сами, бесплатный обмен!

На самом деле, я вижу много друзей вокруг меня, жалующихся на свою низкую зарплату, включая автора. Причина в том, что я не дал интервьюеру хорошего ответа во время интервью. Поэтому автор будет продолжать обновлять проблемы, возникающие в процессе интервью, я также надеюсь, что вы сможете добиться прогресса с автором, учась вместе.

Я хочу понять требования к памяти для файлов ресурсов изображений, которые будут отображаться на дисплее с разрешением 240 x 400.

Дисплей имеет следующие характеристики:

Он поддерживает глубину цвета до 18 бит и использует драйвер дисплея ILI9327.

Предполагая, что мне нужно отобразить 50 различных значков размером 10 x 10 мм каждый, какой объем памяти потребуется?

Вот мои расчеты:

Пикселей на мм = 400/61,2 = 6,536

Количество пикселей в одном изображении = 65,36 x 65,36 = 4272 пикселя

Каждому пикселю потребуется 18 бит X 3 (для R, G и B) = 54 бита

Всего требуется битов = 4272 x 54 = 230 688 битов = 28,16 КБ

Для 50 изображений мне потребуется 1,375 МБ дискового пространства.

Верны ли мои расчеты?

\$\begingroup\$ Вы рассчитываете требования к хранилищу верхнего уровня. Обычно изображения сжимаются, и часто быстрее читать и распаковывать на лету (скажем, с SD-карты), чем читать лишние байты из несжатого файла. Часто это происходит из-за того, что ввод-вывод устройства является узким местом. \$\конечная группа\$

4 ответа 4

Количество пикселей в одном изображении = 65,36 x 65,36 = 4272 пикселя

Ну, вы имеете в виду количество пикселей на значок. Но даже в этом случае вы не можете производить дробные пиксели, поэтому ваше число должно быть либо 65 х 65, либо 66 х 66. И это приводит к дальнейшему упрощению. Почему бы не сделать ваши иконки размером 64 x 64? Это упростит вычисление адресов для вашей памяти и приведет к «усадке» всего около 2%. И поверьте мне, в таком размере никто этого не заметит. Тогда ваши значки будут иметь размер 4096 пикселей.

Для каждого пикселя потребуется 18 бит X 3 (для R, G и B) = 54 бита

Нет. Как только что ответил jms, всего 18 бит на пиксель или 6 бит на цвет. Тем не менее, опять же, вы должны подумать о том, чтобы не слишком беспокоиться о битовом уровне. Храните значения цвета в виде неполных байтов (6 бит на байт) с отдельными байтами для каждого цвета. Это потребует на 33 % больше памяти, но значительно снизит вычислительную нагрузку при переносе из памяти на экран.

Всего требуется битов = 4272 x 54 = 230688 битов = 28,16 килобайта

Всего битов 4096 x 24, или 98 304 бит, или 12 288 байт.

Для 50 изображений мне потребуется 1,375 мегабайта памяти.

12288 умножить на 50 дает 614400 байт.

\$\begingroup\$ Но, конечно, если мы говорим о постоянном хранилище, то вы бы хранили свои значки в сжатом формате PNG или JPEG? Или, если мы говорим о кадровом буфере, то это просто (display_width * display_height * bpp) / 8 байт? \$\конечная группа\$

\$\begingroup\$ @aroth — это прямо вводит вас в мир компромиссов. Что важнее, объем памяти или требования к обработке?Использование несжатых изображений позволяет практически безболезненно передавать их на экран за счет больших файлов. Это еще проще без необходимости распаковывать данные о цвете из более крупного слова. Распаковка сжатого изображения и/или применение таблиц цветов позволяет получить гораздо меньшие файлы данных, но усилия по обработке могут быть пугающими для новичка. Все дело в приоритетах и ​​вкусах. \$\конечная группа\$

Упростите себе жизнь, сделав значки размером 64 x 64 пикселя. Нарисуйте вокруг них рамку, если хотите, чтобы они выглядели больше.

С 16-битным цветовым форматом для каждого значка требуется всего 8 КБ или 400 КБ для набора из 50.

Простой формой сжатия является использование таблицы цветов вместо непосредственного сохранения цвета каждого пикселя. 16 цветов часто бывает более чем достаточно для значка, особенно если вы примените немного творческого сглаживания. Это уменьшает объем хранилища до 2 КБ на значок плюс 32 байта для таблицы цветов. Общий объем хранилища составляет чуть более 101 КБ, если у каждого значка своя таблица цветов.

Чтобы удовлетворить собственное любопытство, я взял следующее изображение "наихудшего случая" (отсюда):

Эта командная строка ImageMagick

превратил это в это:

Неплохо, и, конечно, исходные изображения с более ограниченным диапазоном цветов получатся еще лучше. Например, вот Олин, обработанный таким же образом:

\$\begingroup\$ Ключевое слово: индексированный цвет. Если, например. 16 цветов на растровое изображение недостаточно, вы можете разделить значок на несколько меньших растровых изображений, каждое из которых имеет свою палитру. Применение дизеринга тоже может помочь. \$\конечная группа\$

Подробнее о глубине цвета

Расширяя ответ Дейва Твида, вы можете сделать даже лучше, чем он показал.

Вот тот же оригинал большого размера, который он использовал:

Обрезано до размера квадрата и уменьшено до 64 x 64 пикселей, но при использовании полного (8 бит на красный, зеленый, синий) цвета получается следующее:

Округление информации о цвете с 8 бит на канал до 6 бит приводит к следующему:

Это то, на что способен ваш дисплей, поскольку вы говорите, что он поддерживает 18-битную глубину цвета.

Округление информации о цвете до 5 бит для красного, 6 для зеленого и 5 для синего, всего 16 бит на пиксель:

Этого действительно должно быть достаточно для значков.

Даже без сжатия значки этого формата занимают всего 64 x 64 x 2 = 8192 байта. Для 50 таких изображений потребуется 409 600 байт.

\$\begingroup\$ Мое изображение сжато до 4 бит на пиксель (16 цветов) -- 2 КБ на значок плюс 32-байтовая таблица поиска. Я хотел показать, как выглядит дизеринг с ограниченным набором цветов. \$\конечная группа\$

\$\begingroup\$ @Dave: Это неясно из вашего ответа, но это объясняет артефакты сглаживания. \$\конечная группа\$

Для каждого пикселя потребуется 18 бит X 3 (для R, G и B) = 54 бита

Ваша оценка неверна. Значение «18 бит» соответствует на пиксель, а не на цвет. Красный, зеленый и синий каналы имеют максимальную разрядность 6 бит (64 различных значения), всего 18 бит.
Этот контроллер дисплея также поддерживает 16-битный режим (где пиксельные данные имеют только 5 бит для красного, 6 для зеленого и 5 для синего), что позволяет легко упаковать каждый пиксель всего в два байта. Это упрощает эффективное хранение растровых изображений и увеличивает количество пикселей, которое можно записать на дисплей в секунду.

Количество пикселей в одном изображении = 65,36 x 65,36 = 4272 пикселя

Вы практически не можете хранить дробные пиксели, поэтому ваши фактические растровые изображения (изображения/спрайты/символы/что-то еще), вероятно, будут иметь размер 65 2 = 4225 пикселей.

Если пойти по простому пути (16-битный формат пикселей R5G6B5), то 4225 * 16 бит составят 67 600 бит на растровое изображение или 8 450 байт на растровое изображение. Для 50 изображений потребуется 423 КБ (без сжатия).

Если вам действительно нужна полная глубина цвета, вам потребуется более 2 байтов на пиксель. На этом этапе вы можете также выделить по одному байту для каждого цвета (как предлагает WhatRoughBeast), что еще больше увеличит потребность в хранилище на 3/2 (634 КБ для 50 растровых изображений 65x65).

Что влияет на размер файла растровых изображений? В этой статье показано, как рассчитать размер несжатых файлов.

Миллионы изображений передаются через социальные сети за то время, которое требуется вам, чтобы прочитать это предложение: данные в изображении могут быть переданы в одно мгновение. Как мы можем отправлять изображения так быстро? В этом разделе вы узнаете, почему размер изображения имеет значение и как рассчитать размер файла растровых изображений.

Что такое размер файла и почему он важен?

Как упоминалось ранее, размеры файлов варьируются от битов, байтов и килобайтов (наименьшие размеры) до (и выше) гигабайтов, терабайтов и петабайтов (более крупные файлы).

В наши дни быстрое подключение к Интернету позволяет нам быстро передавать изображения. Если время передачи важно, изображение должно быть как можно меньше.

Факторы размера файла

Хотите продолжать
учиться?

Представление данных в вычислениях: оживление данных

Чем больше пикселей в изображении, тем больше места вам потребуется для его хранения.

Разрешение

Количество пикселей в изображении называется его разрешением. Это часто представляется как ширина × высота, и в большинстве операционных систем вы можете найти его в свойствах файла изображения

Упражнение в классе: найдите решение

Попросите учащихся найти разрешение одного или нескольких изображений в общей папке. Таким образом, вы можете плавно ввести тему метаданных.

  1. Нажмите правой кнопкой мыши (или щелкните, удерживая клавишу CTRL, если вы используете Mac) на смайлике выше.
  2. Сохраните изображение на своем компьютере.
  3. Откройте папку с изображением и щелкните его правой кнопкой мыши (Ctrl + щелчок для Mac).
  4. Нажмите на свойства
  5. Найти высоту и ширину изображения
  6. Рассчитать разрешение изображения

Помимо разрешения вы могли найти и другую информацию об изображении. Эта информация обычно называется метаданными.

Антракт: метаданные

Когда вы делаете снимок на телефон, вы можете хранить больше данных, чем ожидаете. Помимо самого изображения, ваш телефон также может сохранять такую ​​информацию, как настройки камеры, дату и время и, возможно, даже ваше местоположение!

Если вы отправите изображение другу, и он сделает его снимок экрана, сами данные изображения (изображение) не изменятся, но изменятся некоторые свойства изображения (например, как и когда было сделано изображение). Информация о свойствах изображения, которые не являются его частью, называется метаданными.

Совет учителю: попросите учащихся подумать о том, какие еще типы метаданных могут собираться различными мобильными приложениями.

Разрядность

Вторым фактором, влияющим на размер файла изображения, является разрядность. Битовая глубина – это объем памяти, необходимый каждому пикселю для представления диапазона различных цветов.

Представьте себе черно-белое изображение. Каждый пиксель может быть только черным или белым, поэтому мы можем представить это изображение двумя цветами и, следовательно, одним двоичным битом: 1 = белый и 0 = черный.

< td>16
Двоичные биты, доступные для цвета Количество цветов, которые мы можем представить для пикселя
1 2, черно-белое
2 4, например черный, белый и два серых
3 8
4
8 256
16 65536< /td>
24 16,7 млн

Изображения, которые вы делаете с помощью онлайн-приложений, таких как Instagram или Snapchat, скорее всего, будут храниться с глубиной цвета 16 или 24 бита. Это означает, что каждый пиксель может использовать один из 65 536 или 16,7 миллионов цветов соответственно. Вау!

Представьте, что вы работаете в компании по производству воздушных шаров и хотите создать цифровую рекламу, чтобы продемонстрировать все свои замечательные воздушные шары. Рекламу увидят миллионы людей со всего мира. Здесь использование 24 бит (16,7 миллионов цветов) для создания наиболее яркого и точного изображения в вашей рекламе имеет смысл! Качество изображения и небольшой размер файла — две конкурирующие цели, которые должны быть сбалансированы для каждого изображения.

Расчет размера

Размер файла может быть выражен как разрешение (ширина изображения, умноженная на высоту изображения), умноженное на разрядность (количество бит, необходимое для хранения цветов).

Файлы обычно также содержат некоторые метаданные, которые немного увеличивают размер файла, но пока мы их игнорируем.

Задание: Насколько велик ваш смайлик?

Ваша цель — найти общий размер изображения смайлика, включая его разрядность. Еще раз откройте изображение смайлика, которое вы скачали для первого действия этого шага.

Читайте также: