При расширении (декодировании) и хранении в виде байтов в памяти (ОЗУ) изображение действительно будет занимать 2352 байта. Но JPEG сжимаются для экономии места на диске, SD-картах камеры, а также при отправке по электронной почте и передаются, поэтому они меньше по размеру и занимают меньше места / полосы пропускания.
Если вы хотите увидеть интенсивность пикселей в их расширенном формате RGB, вы можете использовать такой инструмент, как ImageMagick в Терминале / командной строке. Сделаем красное изображение 28x28 - пока сделаю его в формате PNG:
magick -size 28x28 xc:red PNG24:image.png
![введите описание изображения здесь](https://i.stack.imgur.com/iZ044.png)
Теперь, если вы хотите просмотреть пиксели, вы можете преобразовать изображение в текстовый дамп с помощью ImageMagick следующим образом:
magick image.png -depth 8 -colorspace rgb txt:
Пример вывода
# ImageMagick pixel enumeration: 28,28,65535,rgb
0,0: (255,0,0) #FF0000 rgb(255,0,0)
1,0: (255,0,0) #FF0000 rgb(255,0,0)
2,0: (255,0,0) #FF0000 rgb(255,0,0)
3,0: (255,0,0) #FF0000 rgb(255,0,0)
...
...
24,27: (255,0,0) #FF0000 rgb(255,0,0)
25,27: (255,0,0) #FF0000 rgb(255,0,0)
26,27: (255,0,0) #FF0000 rgb(255,0,0)
27,27: (255,0,0) #FF0000 rgb(255,0,0)
Или, если вы хотите просмотреть их в более сырой форме шестнадцатеричного кода:
convert image.png -depth 8 rgb:image.raw
и просмотрите image.raw
в шестнадцатеричном редакторе или воспользуйтесь встроенными средствами Linux:
convert image.png -depth 8 rgb: | xxd -g 3 -c12 | more
00000000: ff0000 ff0000 ff0000 ff0000 ............
0000000c: ff0000 ff0000 ff0000 ff0000 ............
00000018: ff0000 ff0000 ff0000 ff0000 ............
Обратите внимание, что если вы проверите размер необработанного несжатого (декодированного) изображения, вы увидите, что он успешно совпадает с вашим расчетом в 2352 байта:
ls -l image.raw
-rw-r--r-- 1 mark staff 2352 27 Aug 09:56 image.raw
Обратите внимание, что я использовал PNG, а не JPEG выше, потому что JPEG с потерями и вы не получите обратно то, что вы сохранили, вы получите что-то похожее, но занимает меньше места - как я сказал выше.
Вот пример. Я нарисую красную и зеленую линии на черном фоне, сохраню как PNG и посчитаю цвета:
magick -size 100x100 xc:black +antialias -fill red -draw "line 5,5 95" -fill lime -draw "line 95,5 5,95" image.png
![введите описание изображения здесь](https://i.stack.imgur.com/wxHqC.png)
Теперь посчитайте цвета:
magick -format %k image.png info:
3
Теперь сделайте то же самое, что и JPEG с потерями:
magick -size 100x100 xc:black +antialias -fill red -draw "line 5,5 95,95" image.jpg
И посчитайте цвета в JPEG, и теперь их 148:
magick -format %k image.jpg info:
148
Ключевые слова: обработка изображений, ImageMagick, JPEG, с потерями, PNG без потерь, простое.
person
Mark Setchell
schedule
26.08.2020