Nano Hash - криптовалюты, майнинг, программирование

Ограничение размера изображения (‹1 МБ) при изменении размера холста HTML5

У меня есть загрузчик HTML5 для изображений. Я загружаю два изображения для любого изображения, которое выбрал пользователь. Один 64х64, другой 320х240. Я использую canvas.drawImage() для изменения размера изображений. Все работает нормально.

Однако как я могу убедиться, что изображения после изменения размера составляют ‹= 1 МБ. Зависит ли размер изображения после изменения размера от используемого браузера?


  • Предполагая, что ваше изображение 24-битное, размер несжатого файла изображения можно рассчитать следующим образом: 320px x 240px x 24bit = 1,843,200 bits = 230,400 bytes. Он не должен превышать 1 МБ. (Калькулятор) 24.02.2014
  • как получить глубину цвета изображения? screen.colorDepth дает мне глубину цветовой палитры. Будет ли она одинаковой для изображений, отображаемых на экране? 24.02.2014
  • Да. К вашему сведению, RGB 24-битный. 99% вы используете RGB. 24.02.2014
  • Холст @ShivanRaptor на самом деле 32-битный, RGB + альфа-канал. Только для JPEG результат будет 24-битным, для PNG — 32-битным. 24.02.2014
  • Понятно. Благодарю за разъяснение. 25.02.2014

Ответы:


1

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

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

Однако вы можете рассчитать необработанный размер изображения. Canvas 32-битный, то есть три 8-битных канала для RGB (24-бит) + один 8-битный канал для альфа-канала.

Если вы сохраните свои изображения в формате PNG, у вас будет RGBA - размер для этого:

width * height * 4 = size in bytes

Если вы сохраните в формате JPEG, у вас будет только RGB:

width * height * 3 = size in bytes

JPEG может быть сжат сильнее, чем PNG, поэтому вы можете уменьшить размер, используя дополнительный параметр качества для toDataURL(type [, quality= [0.0, 1.0]]).

Для вашего примера размер raw будет следующим:

320 x 240 x 4 = 307 200 bytes (/ 1024 = 300 kb / 1024 = 0.29 mb).

и с RGB (без альфы)

320 x 240 x 3 = 230 400 bytes (/ 1024 = 225 kb / 1024 = 0.22 mb).

Когда изображение преобразуется в data-URI, содержимое кодируется как base-64. Base-64 всегда добавляет 33% к размеру из-за способа кодирования данных (плюс небольшой заголовок, чтобы фактически сделать его data-uri, IIRC около 14-20 байт).

В любом случае, в этом случае вы должны быть в пределах 1 МБ.

24.02.2014
Новые материалы

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

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..