Поверните изображение удобным для памяти способом

У меня много огромных изображений (4000x4000px, PNG или JPG), и я хочу повернуть их на 90 ° или сжать. Меня не волнует скорость (задача может завершиться за секунды), меня волнует потребление памяти.

Есть ли какой-нибудь (нетривиальный?) Удобный для памяти способ выполнения таких преобразований? Я думаю о потоковой передаче -> с BMP, это довольно просто, просто прочитайте строку и поместите пиксели в определенные места в файле. Язык / платформа для меня неактуальны (у меня есть текущее приложение, написанное на C#).

Не могли бы вы подробнее объяснить Почему, что вам небезразлично потребление памяти? Такое изображение может занимать порядка 100 мегабайт памяти; у вас есть 2000 мегабайт, доступных даже на 32-битных машинах, и намного больше, чем на 64-битных машинах. И долго это не протянет. Почему вы оптимизируете удаление короткоживущих больших объектов из кучи?

Eric Lippert 27.10.2018 08:58

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

Brian 29.10.2018 14:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
54
0

Другие вопросы по теме