как определить размер рисунка в Кб?
1
Ученик
(170),
закрыт
13 лет назад
Вот дано, допустим, 3 цвета и размер m x n. Как можно посчитать?
Дополнен 13 лет назад
Мне посчитать именно надо…
Мансур Хафизов
Профи
(785)
13 лет назад
Допустим это одно битный рисунок то есть 256 цветов. Умножаем ширину на высоту получаем количество точек (пикселей) в рисунке. На кодирование каждой точки расходуется 1 байт. Количество точек умножаем на 1 байт= размер рисунка в байтах. Пример: есть рисунок 800х600, умножаем, получается 480 000 точек, то есть 480 000 байтов, или делим на 1024 получим 468,75 Кбайтов)))
An
Профи
(854)
13 лет назад
Нажимаете на фото правой кнопкой мыши и выбирайте свойства. Вот и все!
Ой, то что внизу не увидела: (,сориии
Andrei
Мастер
(1152)
13 лет назад
I=3*x*y*Log2 n
где x и y – количество микрозон соответствующего растра по горизонтали и вертикали (количество точек)
n – количество квантов, т. е. характеристика разрешающей способности оборудования воспроизведения или формирования изображения
Пример
Дана фотография размером 10х10 см, воспрезведенная с помощью растра 30 точек/см. Может быть передано до 128 уровней яркости соответствующих точек.
Решение:
I=(10×10)x30xLog2 128=21000 бит = 2625 байт
Информационный объем графического файла
Немного теории…
Объем файла — это количество информации, для хранения которой требуется дисковое пространство.
Объем файла зависит от геометрических размеров изображения и от выбора двух параметров разрешения и глубины цвета.
1. Информационный объем графического файла определяется по формуле:V=x*y*R2*I
Обозначения:
R – количество пикселей в квадратном дюйме;
I – глубина цвета – количество бит (двоичных разрядов), отводимых под кодирование цвета одной точки;
S – количество точек в изображении (геометрическая площадь изображения);
S = X * Y, где Х – длина, Y – ширина изображения;
N – количество пикселей в изображении;
K – количество цветов в палитре (K = 2I)
Проще:
V = S * I или V = N * I
2. Важнейшими характеристиками монитора являются размеры его экрана, которые задаются величиной его диагонали в дюймах (15“, 17″, 19” и т.д.) и размером точки экрана (0,25 мм или 0,28 мм), а разрешающая способность экрана монитора задается количеством точек по вертикали и горизонтали. Следовательно, для каждого монитора существует физически максимально возможная разрешающая способность экрана.
Ознакомьтесь с методами решения задач.
Задача 1.
Необходимо рассчитать объем дискового пространства для хранения тонового изображения размером 127×254 мм и разрешением 72 ppi.
Алгоритм решения
1. Значения длины (x) и ширины (y) необходимо представить в дюймах: x=127:25,4=5 (дюймов) y=254:25,4=10 (дюймов).
2. Площадь изображения (S) вычисляется перемножением этих величин: S=x*y=5*10=50 (квадратных дюймов).
3. Геометрическая площадь изображения содержит сетку дискретизации, поэтому далее необходимо вычислить общее количество пикселей. Величина разрешения (R) по определению — величина линейная, а дискретизация осуществляется по площади.
Следовательно, необходимо вычислить количество пикселей в квадратном дюйме: N1=R2=72*72=5184 (пикселей).
4. Общее количество пикселей составит: N=N1*S=5184*50=259 200 (пикселей).
Примечание
Эти вычисления можно представить проще.
По длине каждый дюйм состоит из 72 пикселей, следовательно, длина включает 72*10=720 (пикселей). По ширине каждый дюйм также состоит из 72 пикселей, следовательно, ширина включает 72*5=360 (пикселей).
Количество пикселей во всем изображении будет равно произведению этих величин 720*360=259 200 (пикселей). Запишем эти действия в одну строку:
(72*10)*(72*5)=72*72*5*10=722*5*10=259 200.
5. Все изображение состоит из 259 200 пикселей, каждый из которых требует одного байта для кодирования тоновой информации (глубина цвета — I).
Следовательно, объем файла (V) будет равен: V=N*I=259 200*1=259 200 (байтов).
6. Для того чтобы это значение пересчитать в килобайты, полученное число необходимо еще разделить на 1024: V=259 200:1024=253,125×253 (килобайта).
7. Можно убедиться в правильности расчетов, если ввести исходные данные в соответствующее окно программы пиксельной графики или интерфейса сканера.
Замечание
Следует обратить внимание на то, что объем файла в пиксельной графике не зависит от содержания. Отсюда — несколько следствий.
– Необходимость кадрирования, что обозначает «обрезку» лишнего изображения и удаление лишней площади. Это полезно и по эстетическим критериям.
– Если необходимо уменьшать объем файла, то достичь этого можно только за счет уменьшения одного, двух или всех параметров: геометрических размеров изображения, его разрешения или глубины цвета.
Задача 2
Укажите минимальный объем памяти (в килобайтах), достаточный для хранения любого растрового изображения размером 128х128 пикселей, если известно, что в изображении используется палитра из 256 цветов?
Решение:
1) Палитра изображения составляет 256 цветов, значит, глубина цвета I = log2256 = 8 бит = 23бит
2) Общее число точек изображения S = 128 * 128 = 214.
3) Объем памяти, достаточный для хранения изображения V = 214 * 23 (бит) = 217 (бит) = 214 б = 24 Кб = 16 Кб
Задача 3
Для хранения растрового изображения размером 64х128 пикселей отвели 8 Кб памяти. Какое максимально возможное число цветов в палитре изображения?
Решение:
1) Общее количество точек в изображении составляет N = 64*128 = 26*27 = 213.
2) На кодирование цвета одной точки приходится I = V/N = 8 Кб/213 = 23*210*23 /213 = 23 бит = 8 бит
3) Количество возможных цветов в изображении K = 2I = 28 = 256
Задача 4
В процессе преобразования растрового графического файла количество цветов уменьшилось с 16 777 216 до 256. Во сколько раз уменьшился информационный объем файла?
Решение:
1) I1 = log2 16 777 216 = 24 (бита)
2) I2 = log2 256 = 8 (бит)
3) I1 / I2 = 24 / 8 = 3
Ответ: в 3 раза
Задача 5
Определите, какую часть экрана займет изображение файла типа ВМР объемом 3 Мб, созданного при глубине цвета, равной 32 бита, при разрешении экрана 1024х768 точек и качестве цветопередачи 32 бита?
1) Весь экран 2) 1/2 экрана 3) 1/3 экрана 4) 1/4 экрана
Решение
1) (1024*768*32)/8 – информационный объем изображения рабочего стола, выраженный в байтах).
2) (3 * 210 * 210) / (210 * 768 * 25) / 23 = 210 / (256 * 22) = 210 / 210 = 1.
Задача 6
Фотография размером 10х10 была отсканирована с разрешением 400 dpi при глубине цвета, равной 24 бита. Определите информационную емкость полученного растрового файла.
Решение
1) 10 / 0,25 = 4 (дюйм)
2) 4 * 400 = 1600 (пикселей)
3) (1600 * 1600 * 24) / 8 = (24 * 100 * 24 * 100 * 3) = 28 * 3 * 104 = 7 680 000 (байт) = 7,3 Мб
Задача 7
Определить максимально возможную разрешающую способность экрана монитора с диагональю 15” и размером точки экрана 0,28 мм.
Решение:
1) Выразим размер диагонали в сантиметрах (1 дюйм = 2,54 см):
2,54 см * 15 = 38,1 см
2) Определим соотношение между высотой и шириной экрана для режима 1024х768 точек:
768 / 1024 = 0,75
3) Определим ширину экрана. Пусть ширина экрана равна Х, тогда высота равна 0,75Х.
По теореме Пифагора имеем:
Х2 + (0,75Х)2 = 38,12
1,5625Х2 = 1451,61
Х2 ≈ 929 Þ Х ≈ 30,5 см
Количество точек по ширине экрана равно: 305 мм / 0,28 мм = 1089.
Максимально возможным разрешением экрана монитора является 1024х768.
Задача 8
Сканируется цветное изображение размером 10х10 см. Разрешающая способность сканера 600dpi и глубина цвета 32 бита. Какой информационный объем будет иметь полученный графический файл?
Решение:
Разрешающая способность сканера 600 dpi означает, что на отрезке длиной 1 дюйм сканер способен различить 600 точек.
1) Переведем разрешающую способность сканера из точек на дюйм в точки на сантиметр:
600 dpi : 2,54 ≈ 236 точек/см.
2) Следовательно, размер изображения в точках составит 2360х2360 точек.
3) Общее количество точек изображения равно:
2360 * 2360 = 5 569 600.
4) Информационный объем файла равен:
32 бита * 5 569 600 = 178 227 200 бит ≈ 21 Мб.
Сложно однозначно ответить на вопрос сколько в 1 пикселе байт, ведь размер пикселя в байтах или битах зависит от того, сколько цветов, какая кодировка используется.
Краткий ответ: 1 пиксель = 3 байта (при цветовой схеме True-color).
Если сохранять картинку с помощью какого-нибудь графического редактора, используя разное количество цветов, то можно увидеть, что вес картинки при сохранении с использованием 256 цветов будет выше, чем при использовании 128 цветов (что логично).
Для примера приведены скриншоты ниже.
Это одна и та же картинка, в ней одинаковое количество пикселей, но в первом случае она весит 196,8 K, а во втором 160,7 K.
Вес 1 пикселя в зависимости от разрядности цветового режима
Сколько будет весить 1 пиксел в байтах и битах в зависимости от разрядности цветового режима?
Размер пикселя в байтах:
- В монохромном (21): 1 пиксель = 1/8 байт (1 бит)
- В 16-цветном (24): 1 пиксель = 0,5 байт (4 бит)
- В 256-цветном (28): 1 пиксель = 1 байт (8 бит)
- True-color (224): 1 пиксел = 3 байта (24 бита)
- True-color + Альфа канал (224 + 8-битный канал): 1 пиксел = 4 байта (32 бита)
1 пиксель может быть равен от 1 до 32 бит (от 1/8 до 4 байт).
Если для примера взять RGB модель кодирования (True-color 224), состоящую из 3-х основных цветов: красного, зеленого, синего, каждый из которых в свою очередь имеет по 256 оттенков, то можно посчитать:
1 параметр из 256 оттенков = 1 байт = 8 бит. Учитывая, что RGB – 3 цвета = 3 параметра по 256 оттенков каждый, то соответственно получаем, что для кодирования одного пикселя используется 3 байта.
1 пиксель = 3 байта = 24 бита.
Подсчет размера 1 пикселя на картинке
С подсчетами исходя из цветовой разрядности разобрались, но что если нужно просто посчитать размер 1 пикселя в какой-то конкретной фотографии или на какой-то картинке?
Сделать это достаточно просто:
- Нужно умножить высоту на ширину, получив тем самым общее количество пикселей в изображении. В статье «Как узнать размер изображения в пикселях» описано, как можно посмотреть размер картинки;
- Затем необходимо узнать вес картинки. Сделать это можно кликнув правой кнопкой мыши по картинке, вызвав тем самым контекстное меню, в котором следует выбрать пункт «Свойства». Там и будет указан вес в байтах.
- Осталось лишь поделить вес в байтах на размер картинки в пикселях. Таким образом получится вес 1 пикселя в байтах.
Не нашли ответ? Тогда воспользуйтесь формой поиска:
If you already have the image on the filesystem:
import os
os.path.getsize('path_to_file.jpg')`
If, however, you want to get the saved size of an image that is in memory and has not been saved to the filesystem:
from io import BytesIO
img_file = BytesIO()
# quality='keep' is a Pillow setting that maintains the quantization of the image.
# Not having the same quantization can result in different sizes between the in-
# memory image and the file size on disk.
image.save(img_file, 'png', quality='keep')
image_file_size = img_file.tell()
NOTE: if you use a different quality setting for each method you can end up with a smaller size in one or the other.
This method will avoid multiple reads of the image data as with StringIO. Note, however, that it will use more RAM. Everything is a tradeoff. 🙂
Edit: I just saw this comment from the OP:
finally, the problem is from the beginnig, if someone will upload a
picture that have 1 giga (forged one) he’ll kill the server before PIL
will do its stuff, so i must block the request before it finishs!
This is a very different question, and is probably best accomplished at the web server. For nginx, you can add this to your configuration:
http {
#...
client_max_body_size 100m; # or whatever size you want as your limit
#...
}
Задание №7
Для хранения произвольного растрового изображения размером 128х320 пикселей отведено 20 Кбайт памяти без учета размера заголовка файла. Для кодирования цвета каждого пикселя используется одинаковое количество бит, коды пикселей записываются в файл один за другим без промежутков. Какое максимальное количество цветов можно использовать в изображении?
Для начала разберемся какие данные у нас уже есть:
- Нам дан размер изображения – 128х320
- Объем в Кбайтах этого изображения равен 20.
Напоминаю вам формулу, которая включает в себя объем памяти, размер изображения и глубину цвета.
Из этой формулы мы можем найти глубину цвета, т.е. объем одного пикселя в битах. Для этого мы общий объем изображения должны поделить на количество пикселей. 128х320 – это и есть количество пикселей.
Обратите внимание, что объем изображения нам дан в Кбайтах. Мы Кбайты умножаем на 1024 – получаем байты. А чтобы получить биты, нужно умножить еще на 8.
По условию задачи нам нужно найти максимальное количество цветов. Для нахождения количества цветов у нас тоже есть формула.
Так как глубину цвета мы уже знаем, нам остается ее только подставить в формулу.
Ответ: 16
Если хотите узнать больше теории про кодирование информации то вам стоит ознакомится со статьей – Информатика. Кодирование информации.
А еще жмите палец вверх и подписывайтесь на мой канал, чтобы не пропустить следующие разборы задач по информатике.