Высококачественное сжатие JPEG с c#

Я работаю с некоторыми дизайнерами, редактирующими файлы CSS, используемые некоторыми веб-представлениями в приложении. Они жаловались, что изменения в таблицах стилей не были отражены в приложении, и небольшая отладка с Чарльзом подтвердила, что они не были перезагружены. Я пытался, казалось бы, каждый ответ на StackOverflow, но безрезультатно.

То, что в конце концов уловило, было создание подкласса NSURLCache, который переопределяет -cachedResponseForRequest:

- (NSCachedURLResponse*)cachedResponseForRequest:(NSURLRequest*)request
{
    if ([[[[request URL] absoluteString] pathExtension] caseInsensitiveCompare:@"css"] == NSOrderedSame)
        return nil;
    else
        return [super cachedResponseForRequest:request];
}

Я затем устанавливаю его с разумной памятью и емкостью диска:

NSURLCache *currentCache = [NSURLCache sharedURLCache];
NSString *cachePath = [cachesDirectory() stringByAppendingPathComponent:@"DebugCache"];

DebugURLCache *cache = [[DebugURLCache alloc] initWithMemoryCapacity:currentCache.memoryCapacity diskCapacity:currentCache.diskCapacity diskPath:cachePath];
[NSURLCache setSharedURLCache:cache];
[cache release];

(cachesDirectory() - это функция, которая возвращает /Library/Caches в каталоге приложения на iOS).

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

36
задан Bobrovsky 12 December 2011 в 07:15
поделиться

4 ответа

Похоже, вы устанавливаете качество на 100%. Это означает, что сжатия не будет.

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

ОБНОВЛЕНИЕ: как заметил комментатор, 100% качество все же не означает сжатие без потерь при использовании JPEG. Загрузка изображения, выполнение с ним каких-либо действий и последующее его сохранение в конечном итоге приведет к ухудшению качества изображения. Если вам нужно изменить и сохранить изображение без потери каких-либо данных, вам необходимо использовать формат без потерь, такой как TIFF, PNG или BMP. Я бы выбрал сжатый TIFF (поскольку он по-прежнему без потерь, даже если он сжат) или PNG.

12
ответ дан 27 November 2019 в 06:13
поделиться

Сжатие и качество всегда являются компромиссом.

JPEG всегда будет с потерями.

Вы можете рассмотреть возможность использования PNG и минимизировать файлы с помощью PNGCrush или PNGauntlet

6
ответ дан 27 November 2019 в 06:13
поделиться

Он должен сохранить файл, как его исходное качество и размер

Это не имеют большой смысл. Когда вы используете сжатие с потерями, вы по определению потеряете некоторую информацию. Смысл сжатия изображения - уменьшить размер файла. Если вам нужно высокое качество, а jpeg не делает этого за вас, возможно, вам придется использовать какой-то тип сжатия без потерь, но размеры ваших файлов не сильно уменьшатся. Вы всегда можете попробовать использовать «стандартную» библиотеку для сжатия в jpeg ( libjpeg) и посмотреть, дает ли это какие-либо другие результаты (я сомневаюсь, но я не знаю, что .NET использует под капюшон.)

0
ответ дан 27 November 2019 в 06:13
поделиться

Сжатие формата jpeg по самой своей природе снижает качество. Возможно, вам стоит изучить сжатие файлов, например #ziplib . Вы можете получить приемлемое сжатие для группы файлов.

0
ответ дан 27 November 2019 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: