Вопрос

Я беру изображение из фотопленки, затем некоторое время использую его, а также сохраняю на диск в формате PNG на iPhone.У меня происходит странный сбой, предположительно из-за нехватки памяти.

Имеет ли значение, сохраню ли я его в формате PNG или JPG (при условии, что я выберу примечание для снижения качества в случае JPG)?Конкретно:

  • больше памяти используется UIImage после перезагрузки его с диска, если я сохранил его как PNG?
  • Возможно ли сохранение, поскольку PNG во время процесса сохранения временно использует больше памяти?

Я предполагал, что UIImage является представлением, нейтральным к формату, и это не должно иметь значения, но решил, что мне следует проверить.

Это было полезно?

Решение

У меня есть приложение в магазине, которому необходимо сохранять промежуточные версии изображения во время его редактирования.В исходной версии я использовал для сохранения формат PNG, чтобы избежать потери качества при многократной загрузке и сохранении JPEG.

Примерно в выпуске программного обеспечения 2.2 Apple внесла изменения в код записи PNG, так что сохранение данных PNG из некоторых изображений занимает во много раз больше времени.В итоге мне пришлось перейти на сохранение в формате JPEG, поскольку время ожидания моего приложения истекло при попытке сохранить изображения при выходе.

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

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


У меня происходит странный сбой, предположительно из-за нехватки памяти.


Затем ОСТАНОВИТЕ ТО, ЧТО ВЫ ДЕЛАЕТЕ ПРЯМО СЕЙЧАС и сначала выясните, действительно ли это является причиной сбоя.В противном случае очень велика вероятность того, что вы преследуете не ту проблему, исправляя несуществующую проблему с памятью, игнорируя при этом реальную причину сбоя.Если вы хотите исправить сбой, начни с выяснения причины аварии.Поиск «предположительно» проблемы — это путь к напрасной трате времени и усилий.

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

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

Сохранение изображения в формате PNG или JPEG не должно занимать много временной памяти.Когда изображение находится в памяти, оно обычно хранится в памяти в несжатом виде, поэтому его можно очень быстро отобразить на экране, вместо того, чтобы распаковывать его каждый раз, когда вы хотите его отобразить.По сравнению с размером несжатого изображения объем дополнительной временной памяти, необходимой для его сжатия, очень мал.Если вы можете разместить несжатое изображение в памяти, вам не придется беспокоиться о памяти, используемой при его сжатии.

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

Сбои могут быть вызваны известной утечкой памяти в UIImagePickerController.

Это должно помочь вам это исправить.

У меня нет точных данных, но я предполагаю, что PNG предпочтительнее, потому что Apple, похоже, использует PNG практически везде в iPhone OS.

Однако, если у вас уже есть код для записи PNG, не составит труда изменить его для записи в формате JPEG, не так ли?Просто попробуйте оба метода и посмотрите, какой работает лучше.

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

  1. Является ли больше памяти, а затем используется UIImage после того, как я перезагружаю его на диск, если я сохранил его как PNG?=> Нет, объем памяти будет одинаковым, если вы импортируете два изображения с одинаковым разрешением и одинаковым количеством каналов.(например, RGBA)
  2. Возможно ли сохранение, поскольку PNG во время процесса сохранения временно использует больше памяти?=> Нет, это влияет только на вашу дисковую память.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top