2013-02-08 6 views
1

Я хочу сжать png или jpg на OSX. Я только хочу сжимать, не влияя на качество изображения.
tinypng.orgКак сжать изображения (png, jpg и т. Д.) С помощью объектива C

Есть ли какая-либо рекомендуемая библиотека? я просто знаю, что ты думаешь. есть ли способ сделать это изначально? или другую библиотеку для сжатия/сжатия изображений, не влияя на качество изображения?

моя цель состоит в том, чтобы уменьшить размер файла, например:

logo.png >> 476 k before shrink 
logo.png >> 50k after shrink 

Edit: быть ясно, я хочу, чтобы сжать размер файла , а не разрешение изображения.

+1

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

+1

Знаете ли вы метод, используемый tinypng.org? Мое предложение состоит в том, чтобы сначала понять, что сделано, как это сделать на любом языке/библиотеке, и только потом начните беспокоиться о том, как реализовать его в объектно-c. Он выполняет некоторую форму квантования, но точные данные недоступны нигде. Это означает, что мы также не можем знать, дает ли метод плохие результаты для определенного ввода, не загружая множество разнообразных изображений png в службу и проверяя результат. Наконец, это преобразование влияет на качество изображения. Вы не можете выполнить сжатие с потерями, которого нет. – mmgp

+0

нет, я не знаю метод tinypng.org. я просто хочу сжимать без видимых потерь качества изображения. на tinypng.org я прочитал, что они используют метод, который НЕ доступен в фотошопе и так далее. – brush51

ответ

2

TinyPNG.org работает с использованием квантования изображения - аналогичные цвета на изображении преобразуются в модель HSV или RGB, а затем объединяются в зависимости от расстояния.

Как это работает?
...
При загрузке файла PNG (Portable Network Graphics) аналогичные цвета в изображении объединены. Эта техника называется «квантование»
...
ЦСИ: http://tinypng.org

Ответ здесь описывается способ сделать это: https://stackoverflow.com/a/492230/556479.

Есть также некоторые ответы на этот вопрос с сослаться на то, как вы можете сделать это на Mac OS с помощью Objective-C: How do I reduce a bitmap to a known set of RGB colours

См Википедии для более углубленного руководства: http://en.wikipedia.org/wiki/Color_quantization

+0

Почему вы предполагаете, что он использует HSV? Это может быть также Lab, HSB, HSI, YCbCr и т. Д. И т. Д. И даже RGB. Ни одна из этих ссылок не говорит о том, как это делает tinypng.org. Там слишком много способов выполнить квантование, чтобы попытаться угадать, что делается именно этой службой. – mmgp

+0

Большинство ссылок, которые я посетил, относятся к алгоритмам с использованием HSV и RGB, поэтому я и предполагаю. Кроме того, да, конечно, ссылки не говорят о том, как на самом деле это делает, я не сказал, что они это сделали. –

1

Мои рекомендуется использовать http://pngnq.sourceforge.net, это даст лучшие результаты, чем ImageMagick, и для одного примера, приведенного в http://tinypng.org, он также производит очень похожий результат. Это крошечная реализация C метода, представленного в статье «Коронные нейронные сети для оптимального квантования цвета». Это само по себе намного лучше, поскольку вы больше не полагаетесь на закрытые неизвестные реализации.

Original (57 KB), tinypng.org (16 KB), pngnq (17 KB):

enter image description hereenter image description hereenter image description here

Используя ImageMagick, лучший квантование 256 цветов я могу получить использует LAB цветовой и размывание Флойд-Steinberg:

convert input.png -quantize LAB -dither FloydSteinberg -colors 256 output.png 

Это производит 16 KB PNG, но он содержит гораздо больше визуальные артефакты:

enter image description here

1

У вас возникла проблема с использованием ImageMagick?Он имеет богатый набор функций варианты выравнивания, такие как

bool MagickQuantizeImage(MagickWand mgck_wnd, 
          float number_colors, 
          int colorspace_type, 
          float treedepth, 
          bool dither, 
          bool measure_error) 

Вот очень тщательный guide to quantization using imageMagick

+0

Можете ли вы создать хороший квантованный png из http://i.stack.imgur.com/eJcam.png с помощью ImageMagick? Я мог бы включить лучший, который я могу получить в ответе, который я здесь привел, но это плохой результат. – mmgp

+0

@mmgp, точка взята, до сих пор мои результаты довольно плохи по сравнению с tinypng ... – foundry