Для хранения файлов изображений на жестком диске среда pisoft image framework использует формат

Обновлено: 06.07.2024

Я новый экспресс, nodejs, mongodb. Я создаю сайт для магазина одежды. Они хотят загружать изображения часто, возможно, каждые 2 дня они будут загружать новые изображения, и эти изображения должны быстро отображаться на веб-сайте, эскизы. Нажмите на изображение, чтобы показать детали продукта и т. Д.

Мой вопрос: каковы наилучшие способы хранения изображений?

  1. Сохранить изображения на жестком диске и просто сохранить абсолютный путь в базу данных mongodb?
  2. Хранить изображения в виде двоичного / base64 в базе данных mongodb?

Как быстро загрузить изображения на сайт?

2 ответа

Где мы храним изображения?

Решение № 1 в MongoDB

Поэтому первое решение - хранить изображения внутри MongoDB. Это может приспособить файлы изображения или любой тип файла. Таким образом, вы можете взять файл и связать его с записью внутри MongoDB и сохранить его непосредственно в вашей базе данных.

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

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

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

Так что чем больше памяти они используют, тем больше платят в месяц.

Например, в последний раз, когда я проверял использование MLab, они брали 15 долларов за ГБ. Так что это 15 $ из вашего кармана клиентов для размещения изображений на 1 ГБ.

Для еще одного сайта электронной коммерции мы говорим о 3 ГБ легко, что переводит в 330 изображений более или менее, что равняется 15 долларов в месяц.

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

Итак, лично я считаю, что хранение файлов любого типа непосредственно внутри MongoDB на самом деле не вариант, потому что это будет очень дорогостоящим.

Так что это только одно из возможных решений.

Решение № 2 в HD подключено к серверу

Итак, давайте посмотрим на второе решение, которое может быть доступно для вас. Вы можете использовать жесткий диск, привязанный к вашему серверу Express. Поэтому, когда это приложение развертывается в какой-либо облачной среде, такой как Heroku, Digital Ocean, Linode или AWS, вы обычно получаете жесткий диск, связанный с вашим приложением.

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

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

Каждый говорит, что взять файл и сохранить его на свой жесткий диск. В этой конкретной статье:

Они показывают этот код:

Они используют библиотеку загрузки изображений под названием multer , которая предоставляет механизм diskStorage() для загрузки изображений на диск.

Так что это один из подходов, с которым в целом согласны разработчики.

Это хороший подход в контексте сопоставления «один к одному».

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

Например, если у вас есть несколько машин, размещенных на Digital Ocean или Linode, где каждая среда является отдельным экземпляром.

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

enter image description here

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

Эта проблема возникает, когда вы начинаете использовать поставщика услуг, такого как Linode или Digital Ocean, где у вас есть однозначное сопоставление между сервером и жестким диском.

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

Решение № 3 вне хранилища данных

Это третье решение, которое я использовал в прошлом для React с приложениями Node и Ruby on Rails. Фактически мой веб-сайт Ruby on Rails использует это решение и работает на платформе Heroku.

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

Тем, что я использую для своего веб-сайта портфолио и тем, что я использовал для Node с приложениями React, был Amazon S3, но также существуют хранилище файлов Azure и облачное хранилище Google. Эти системы предназначены для хранения огромного количества данных, и они могут представлять собой файлы любого типа, которые вы можете себе представить. Не только изображения, такие как в вашем случае, но видео файлы, аудио файлы и так далее.

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

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

Я думаю, что вариант 1 - лучший выбор. Однако я настоятельно рекомендую использовать такой сервис, как AWS S3 вместе с cloudfront: это увеличит скорость загрузки изображения и стоимость хранения будет действительно низкой.

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

В этом году в операционных системах Apple изменился формат сохранения изображений по умолчанию. С выходом iOS 11 и MacOS High Sierra миллионы пользователей продукции яблочного гиганта получили возможность использовать новый формат хранения изображений HEIF. Он пришел на смену старому доброму JPEG, хотя многие и не знают, что это произошло. По расчетам Apple пользователи должны получить значительную экономию места на диске (до 50%) за счет большей эффективности сжатия при лучшем качестве картинки.

Последнюю четверть века формат JPEG является отраслевым стандартом для хранения изображений с потерями сжатия. Разработанный в 1992 году формат за прошедшее время стал поддерживаться большинством производителей оборудования и программного обеспечения для захвата и обработки изображений. Однако, по мере того как цифровые камеры и экраны дисплеев движутся к ультра-высоким разрешениям 5K, необходимость в более эффективных алгоритмах сжатия и поддержке альтернативных функций заставила компанию Apple найти современную замену устаревшему стандарту JPEG.

Им стал High Efficiency Image Format, или сокращенно HEIF. Файлы этого формата в операционных системах Apple получили расширение .heic, хотя другими производителями чаще используется .heif.

Несколько фактов о HEIF:

Теперь, когда вы немного больше узнали о HEIF, давайте поговорим о стандарте кодирования HEVC или H.265.

В двух словах, стандарт HEVC поддерживает эффективное сжатие для полноразмерных изображений наряду с предсказанием последовательностей (predictive sequencing) и дополнениями для поддержки других медиа-потоков, таких, как синхронизированный текст и аудио.

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

Кроме того, HEVC поддерживает прямоугольную обрезку и вращение на 90 градусов без необходимости повторного кодирования изображения или последовательности изображений. Это дает возможность написания эффективного кода обработки изображений на мобильных устройствах, что приведет к значительной экономии заряда батареи. На самом деле, устройства Apple с чипом A9 и выше выиграют от аппаратного ускорения для кодирования и декодирования файлов HEIF.

Поддержка формата HEIF в продуктах Apple

image

Слева изображение в формате HEIF, справа JPEG

Изменение Apple формата файлов изображений по умолчанию на HEIF позволит сэкономить место в локальных фотоальбомах пользователя и в iCloud. В примере приведено изображение, закодированное как в JPEG, так и сохраненное в формате HEIF. Самое очевидное, что мы видим при просмотре метаданных, — это сокращение размера файла на почти 1Мб. Также можно заметить, что изображение HEIF более четкое, в то время как JPEG-изображение достаточно размыто.

Автоматическое конвертирование в JPEG будет поддерживаться в течение некоторого времени, так как большинство платформ и сервисов требуют формат JPEG. Например, пользователь может прикрепить HEIF фотографии к письму в электронной почте, и iOS будет автоматически перекодировать их в JPEG.

Форматы графических файлов можно разбить на 2 большие группы: универсальные и специализированные.

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

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

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

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

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

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

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

Для рисунков типа диаграммы целесообразно применение другого метода сжатия, который использует поиск повторяющихся в рисунке «узоров». Такой алгоритм используется в графических файлах форматов TIFF и GIF и позволяет сжать файл в несколько раз.

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

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

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

Рассмотрим некоторые форматы графических файлов более подробно.

Bit MaP image (BMP) — универсальный формат растровых графических файлов, используется в операционной системе Windows. Этот формат поддерживается многими графическими редакторами, в том числе редактором Paint. Рекомендуется для хранения и обмена данными с другими приложениями.

Tagged Image File Format (TIFF) — формат растровых графических файлов, поддерживается всеми основными графическими редакторами и компьютерными платформами. Включает в себя алгоритм сжатия без потерь информации. Используется для обмена документами между различными программами. Рекомендуется для использования при работе с издательскими системами.

Graphics Interchange Format (GIF) — формат растровых графических файлов, поддерживается приложениями для различных операционных систем. Включает алгоритм сжатия без потерь информации, позволяющий уменьшить объем файла в несколько раз. Рекомендуется для хранения изображений, создаваемых программным путем (диаграмм, графиков и так далее) и рисунков (типа аппликации) с ограниченным количеством цветов (до 256). Используется для размещения графических изображений на Web-страницах в Интернете.

Portable Network Graphic (PNG) — формат растровых графических файлов, аналогичный формату GIF. Рекомендуется для размещения графических изображений на Web-страницах в Интернете.

Joint Photographic Expert Group (JPEG) — формат растровых графических файлов, который реализует эффективный алгоритм сжатия (метод JPEG) для отсканированных фотографий и иллюстраций. Алгоритм сжатия позволяет уменьшить объем файла в десятки раз, однако приводит к необратимой потере части информации. Поддерживается приложениями для различных операционных систем. Используется для размещения графических изображений на Web-страницах в Интернете.

Windows MetaFile (WMF) — универсальный формат векторных графических файлов для Windows-приложений. Используется для хранения коллекции графических изображений Microsoft Clip Gallery.

Encapsulated PostScript (EPS) — формат векторных графических файлов, поддерживается программами для различных операционных систем. Рекомендуется для печати и создания иллюстраций в настольных издательских системах.

CorelDRaw files (CDR) — оригинальный формат векторных графических файлов, используемый в системе обработки векторной графики CorelDraw.

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

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

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

Одним из основных графических форматов, применяемых фотографами для хранения и обработки файлов цифровых фотографий, является TIFF (Tagged Image File Format). На русский язык эти слова можно перевести как файловый формат изображений с тегами. Он был разработан в 1994 году компаниями Aldus Corporation и Microsoft.

Теги формата TIFF для файлов фотографий или именованные метки, это информационные блоки, в которых хранится описание изображения – размер, цветовая модель, глубина цвета и другое, а также информация о том, как и когда оно было сделано. Всего для файлового формата TIFF определено несколько десятков тегов трех разных видов: обязательные, расширенные и необязательные метки (рис.1).

Фрагмент таблицы обязательных меток для файла фотографии формата TIFF

Рис.1 Фрагмент таблицы обязательных меток для файла фотографии формата TIFF (чтобы посмотреть таблицу полностью, щелкните по изображению).

Впоследствии компания, владелец спецификации формата TIFF – Aldus Corporation объединилась с компанией Adobe Systems, которая является разработчиком знаменитых программ Photoshop и Lightroom. Сейчас все права на этот формат принадлежать именно этой компании, а значит, ее программы без проблем работают с файлами фотографий формата TIFF.

О формате TIFF для фотографов

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

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

В результате непродуманного использования формата TIFF расходуется самый ценный ресурс любого фотографа, это его время. Кроме того, для надежного хранения огромных объемов цифровых фотографий формата TIFF придется тратить дополнительные усилия и средства (рис. 2).

Среди файлов одной фотографии сохраненных в разных графических форматах, TIFF будет всегда хоть немного, но самым большим

Рис.2 Среди файлов одной фотографии сохраненных в разных графических форматах, TIFF будет всегда хоть немного, но самым большим.

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

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

Особенности фотографий формата TIFF

Файлы фотографий формата TIFF обычно имеют расширение tiff или tif. Он поддерживается как на платформе IBM PC, так и на Apple Macintosh. Многие графические программы как под Windows, так и под Mac могут работать с TIFF файлами. Это позволяет использовать его для переноса цифровых фотографий с одной платформы на другую, но только нужно это указать в параметрах файла при его сохранении (рис.3).

Окно параметров для сохранения файлов фотографий формата TIFF в программе Adobe Photoshop

Рис.3 Окно параметров для сохранения файлов фотографий формата TIFF в программе Adobe Photoshop.

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

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

При сохранении файлов фотографий формата TIFF поддерживаются все режимы кодирования цвета – 8, 16, и 32 бит на канал, а так же основные цветовые пространства – градации серого, индексированные цвета, Lab, RGB, CMYK. Также этот формат позволяет сохранять или не сохранять встроенный цветовой профиль ICC (рис. 4).

Фрагмент окна для управления цветовым профилем в файле фотографии формата TIFF из программы Adobe Photoshop

Рис.4 Фрагмент окна для управления цветовым профилем в файле фотографии формата TIFF из программы Adobe Photoshop.

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

Недостатки фотографий в формате TIFF

Самым главным недостатком фотографий сохраненных в формате TIFF является большой размер их файлов. Например, они могут быть больше своих аналогов сохраненных в формате JPEG в 10 – 12 раз, что, конечно же, налагает на них следующие ограничения.

Хранение фотографий формата TIFF требует дополнительного места на жестком диске компьютера. При записи таких файлов на компакт диски количество записанных на них фотографий будет очень маленьким. Или место, отведенное в каком-либо бесплатном облачном сервисе Интернет таком как, например Google Диск, очень быстро закончится.

В бесплатном облаке Google Диск можно разместить всего около 800 файлов фотографий формата TIFF размера А4, а на DVD диске около 300

Рис.5 В бесплатном облаке Google Диск можно разместить всего около 800 файлов фотографий формата TIFF размера А4, а на DVD диске около 300.

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

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

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

Фрагмент раздела справки сервиса Яндекс Диск о вложенных в письма файлах исключает фотографии формата TIFF

Рис.6 Фрагмент раздела справки сервиса Яндекс Диск о вложенных в письма файлах исключает фотографии формата TIFF.


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

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

Когда нужны фотографии формата TIFF

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

Но перед тем как печатать цифровые фотографии, они обычно проходят обработку в графических программах по устранению каких-то дефектов или улучшению цвета. Для этого может потребоваться их многократное сохранение с использованием слоев. Из всех перечисленных на рисунке 2 файлов фотографий сделать это можно только в PSD и TIFF форматах. Но PSD это формат программы Photoshop, а ее у вас может и не быть…

В некоторых профессиональных цифровых фотоаппаратах формат TIFF используется для сохранения файлов максимально возможного качества изображения и одновременно для экономии времени, которое пришлось бы потратить на их обработку в формате RAW. Такой выбор объединяет основные преимущества таких форматов как JPEG и RAW (рис.7).

В некоторых цифровых фотоаппаратах для сохранения файлов фотографий можно выбрать формат TIFF

Рис.7. В некоторых цифровых фотоаппаратах для сохранения файлов фотографий можно выбрать формат TIFF.

Еще одно оправданное применение формата TIFF – это струйная печать фотографий высокого качества на домашнем принтере. У этого формата больше возможностей для работы с цветом при печати чем, например, у формата JPEG. Хотя эта разница не такая заметная, в некоторых случаях передача цвета на фотографиях формата TIFF будет лучше.

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

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

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