Подтвердить что ты не робот

Почему ".png" файлы, созданные ImageMagick, намного больше, чем файлы ".jpg" и ".gif"?

Я использую ImageMagick для преобразования некоторых файлов из одного формата в другой. Мне всегда казалось, что файлы .png должны быть такими же большими/маленькими, как .jpg, если не меньше, и определенно меньше, чем .gif.

Однако, когда я запускаю

convert photo.jpg photo.png 

Файлы, которые я получаю, примерно в 6 раз больше, чем исходный jpg.
Оригинальный jpg - обычная фотография размером 300x500 px, 52 kb. Вывод является правильным png того же размера, но размер составляет около 307 kb?

Кто-нибудь знает, что происходит? Я что-то делаю неправильно?

P.S:.

Я пробовал как на Debian, так и на Windows с теми же результатами.

P.P.S:.

Также, когда я добавляю параметр resize к этому и изменяю размер до 10000 x 10000. Преобразование и изменение размера в jpg занимает несколько секунд, но оно работает, если я делаю то же самое с png, у меня совсем не хватает памяти, p >

P.P.P.S:. Для людей, которые продолжают отмечать этот вопрос как дубликат PNG против GIF против JPEG против SVG - когда лучше всего использовать?. Пожалуйста, внимательно прочитайте и поймите вопрос. Это не дубликат, так как этот вопрос спрашивает о файлах, созданных программно с помощью специального приложения (магия изображения). Вопрос, который вы отмечаете как дублирующийся, спрашивает, какой формат изображения лучше использовать в Интернете. Два разных вопроса.

4b9b3361

Ответ 1

JPG является алгоритмом сжатия с потерями, тогда как PNG является без потерь один.

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

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

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

GIF меньше, потому что он основан на цветовой палитре (из 256 цветов), а не на отдельных значениях RGB для каждого пикселя (или группы пикселей) в JPG и PNG.

Ответ 2

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

JPEG означает "Joint Фотографическая Экспертная группа." Это должно сказать вам, что формат файла .JPG оптимизирован для фотографий. Он не работает так хорошо для линейного искусства, логотипов, градиента или черепичного/узорного фона и т.п..JPG. Артефакты DCT (Discreet Cosine Transform) ( "блочные" артефакты, которые мы все знаем и ненавидим) гораздо более заметны в линейном искусстве и логотипах, чем в фотографиях.

PNG заменил GIF на все, что GIF был когда-либо полезен, кроме одного, и только потому, что не появился четкий стандарт: анимация. Анимированные .GIF файлы хорошо известны в Интернете. Существуют два конкурирующих стандарта для анимированных .PNG: APNG и MNG.

APNG поддерживается в большинстве современных браузеров, а также полностью обратно совместим (расширение файла -.PNG, а не APNG, и если какая-либо программа, которая может отображать .PNG, но не знает, что APNG "питается" APNG, это будет отображаться либо резервное изображение выбора разработчиков, либо первый кадр анимации, если такой резервный доступ не был предоставлен - насколько это касается старой программы, его просто обычный однокадровый PNG с этим изображение в нем - остальное безопасно игнорируется). Gecko (FF и т.д.) И Presto (Opera) поддерживают его изначально, а Google Chrome (с помощью Webkit) может с надстройкой.

MNG поддерживает основную команду разработчиков PNG-формата, но является ее собственным форматом и не имеет обратной совместимости, но является более мощным и гибким. Прямо сейчас поддерживаются только браузеры на основе KHTML (Konquerer): не Trident (IE), Gecko, Webkit (Chrome, Chromium, Safari) и Presto.

PNG делает все (кроме анимаций, если не улучшено с APNG), что делает GIF, и лучше. При прочих равных условиях .PNG почти всегда будет меньше, чем .GIF с одинаковым разрешением и глубиной. Как и .GIF,.PNG может поддерживать глубину цвета до 8 бит на пиксель в режиме с индексированным цветом (палитрой), но в отличие от .GIF(еще как .JPEG), он также поддерживает режим прямого цвета с 24 бит на пиксель.

В любом режиме он может добавить 8 бит альфа-прозрачности, в отличие от .GIF(который может выполнять только индексированную прозрачность цвета [выбрать цвет из палитры, который будет заменен на 100% прозрачность, ака невидимость].PNG может сделать это тоже). Альфа-прозрачность дает гораздо лучшие результаты, чем индексированная прозрачность, потому что пиксели могут быть частично прозрачными, тогда как с индексированной прозрачностью (единственный вид, доступный в .GIF) ваши варианты либо непрозрачны, либо невидимы. Это делает "ореолы" вокруг непрямоугольных объектов, если они помещены против фоновых цветов, отличных от того, который был .GIF или проиндексирован. PNG изначально "матов". Он также препятствует возможности делать такие эффекты, как свечение, тени и, конечно же, сквозные цветные объекты (без сглаживания). Альфа-прозрачность может делать все эти вещи с легкостью, практически на любом фоне (свечение будет в значительной степени невидимым на белом фоне, а тени будут невидимыми на черном, но вы знаете, что я имею в виду).

Да, вы можете сделать 8-битную альфа-прозрачность в индексированном цвете. PNG! И угадай что? Даже Microsoft Internet Explorer 6 может отображать их просто отлично, в комплекте с прозрачностью! Его единственные 32-битные PNG (24-битный цвет RGB + 8-бит-альфа), которые IE6 подавляли и отображали как серый!

Самой известной программой, которая может экспортировать PNG8 (индексированный цвет) с альфа-прозрачностью, является Adobe (ранее Macromedia) Fireworks. Photoshop "Сохранить для Интернета и устройств" (по крайней мере, с CS3) не смог этого сделать, несмотря на то, что в основном поднял эту функцию из Fireworks, когда Adobe выкупила Macromedia. Он может сохранять PNG8, но только с прозрачностью с индексированным цветом.

В любом случае полные 32-битные (или даже 24-битные) PNG будут довольно большими, хотя обычно намного меньше ближайших эквивалентных .BMP или .TGA или несжатых .TIFF или некоторых таких (если вы не пытаетесь сделать фотографию с ним - вот что такое JPEG!). Он обычно будет несколько меньше, чем .RLE(без потерь сжатый .BMP) или без потерь сжатый .TIF, при прочих равных условиях.

В отличие от большинства других форматов, PNG также поддерживает 48-битный цвет RGB с дополнительными 16-битными альфа-прозрачностью для чрезвычайно высокого качества (намного выше, чем могут отображать большинство мониторов). Они лучше всего используются в качестве промежуточного формата хранения, чтобы сохранить информацию с помощью сканера с высокой глубиной или камеры (режим RAW) или некоторых таких. Их размер файлов будет довольно большим, несмотря на сжатие без потерь.

Одна вещь, которую в настоящее время не может выполнять PNG, - это обрабатывать цветовые пространства без RGB, такие как CMYK или L * a * b.

Короче:

  • Для фотографий используйте .JPG.
  • Для линейного искусства и логотипов ограниченного цвета используйте индексированный цвет .PNG(PNG8) с альфа-прозрачностью, если это необходимо.
  • Для линейного искусства и логотипов обширного цвета (например, много градиентных заливок, эффектов отражения металлическим хромовым типом и т.д.) используйте прямой цвет. PNG24 (PNG24) с альфой, если необходимо, если вы хотите получить лучшее качество или нужна прозрачность (и не против, чтобы он не работал в IE6 или использовал один из множества обходных путей IE6 для прозрачных PNG), и не против больших файлов и использования полосы пропускания. В противном случае используйте .JPG, но имейте в виду, что качество будет ухудшено. Возможно, вам нужно будет закрутить качество JPEG довольно высоко, особенно для логотипов или другой графики с "текстом" в них, что уменьшит экономию вашего файла.
  • Для анимаций Canvas без Flash/Silverlight/Video/HTML5.GIF, если основной выбор в настоящее время, но будьте готовы перейти на APNG (я не думаю, что MNG собирается победить его, несмотря на более официальную поддержку со стороны JPEG).

Ответ 3

Формат PNG может предоставлять изображения 24 бит на пиксель или 8 бит на пиксель. JPG - это 24-битный формат, но он использует сжатие с потерями, чтобы значительно уменьшить размер файла. PNG и GIF используют сжатие без потерь, но GIF работает только с 8 бит, поэтому для вашего изображения требуется 256 цветов или меньше - это часто приводит к более зернистому изображению.

Попробуйте параметры -colors и -dither в ImageMagick, чтобы уменьшить количество бит в вашем PNG-выходе. В этот момент он должен быть сопоставим с размером файла GIF. Если вам необходимо уменьшить его, есть утилиты для оптимизации PNG.

Ответ 4

Формат файла .jpeg - это формат с потерями, он удаляет информацию. Это обеспечивает хорошие коэффициенты сжатия. Формат файла .gif не потерян, но теряет другую информацию, он поддерживает только 256 цветов. Формат файла .png не является потерянным и сохраняет диапазон цветов.

Ответ 5

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

Попробуйте на изображении, состоящем из областей с тем же цветом, разделенных острыми краями (скриншоты хороши, если они не отображают фоновый рисунок рабочего стола, а границы фантазийного окна и панель задач Vista и Windows 7 также имеют тенденцию испортить это вверх). JPEG плохо в этом, и вы, вероятно, найдете PNG для сжатия лучше (вероятно, лучше, чем GIF тоже).

Ответ 6

Ответ на: Кто-нибудь знает, что происходит? Я что-то делаю неправильно?

Да, я изучаю это, вы ничего не делаете неправильно, вы создали 8-битный/цветной RGB PNG Я решаю его с помощью сокращения или сжатия png с помощью pngnq (http://pngnq.sourceforge.net/), которые создают 8-битный цветной цветной PNG.

pngnq мне кажется самым улучшенным проектом, поскольку он является вилкой других, таких как pngquant и т.д., и обычно находится в основном потоке дистрибутивов Linux, поэтому я просто делаю это:

convert photo.jpg png:- | pngnq -s 1 > photo.png 

Для последнего upvoter (2016): pngnq как устаревший в пользу pngquant (https://github.com/pornel/pngquant)