2012-10-02 3 views
2

У меня есть изображение, сжатое в NSData с использованием сжатия JPEG. Я обращаюсь к нему с [UIImage imageWithContentsOfFile:]. Однако с большими изображениями это занимает несколько секунд. Есть ли более быстрый способ загрузки изображений из файловой системы, возможно, с той же скоростью, что и изображения, загружаемые из комплекта? А если нет, есть ли способ временно загрузить более качественную версию изображения, пока загружается полная версия, кроме сохранения более качественной версии?Получите более низкое качество UIImage из NSData?

ответ

3

Хотя вы можете быть в состоянии создать что-то вроде этого, используя JPEG 2000 (вы должны построить свою собственную копию библиотеки Jpeg, как discussed here, а затем вручную писать код для чтения), я не» Думаю, вы получите хорошую отдачу от инвестиций там. Стоимость чтения данных с диска по-прежнему, вероятно, подавит все остальное.

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

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

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

-1

Низкая qulaity - файл меньший, чем другие ... Вот код для проверки файлов в папке документа приложения.

NSFileManager *manager = [NSFileManager defaultManager]; 
if ([manager fileExistsAtPath:path]) { 
    NSDictionary *attributes = [manager attributesOfItemAtPath:path error:nil]; 
    unsigned long long size = [attributes fileSize]; 
    resultlbl.text = [NSString StringWithFormat:@"%d",size]; 
} 
Смежные вопросы