Как преобразовать 32 МБ файла PNG в 200 КБ без потери цвета

У меня есть пара изображений размером 32 МБ, и я хочу изменить их размер с 32 МБ на 100 КБ или любые КБ размер, не влияя на его цвета.

Я пытаюсь выполнить следующие команды:

muhammad@muhammad-mohsin:~/scans$ find . -iname '*.png' -exec mogrify -format jpg "*.png" {} +


muhammad@muhammad-mohsin:~/$ find . -type f -iname \*.png -delete


muhammad@muhammad-mohsin:~/$ find . -iname '*.jpg' -exec mogrify -define jpeg:extent=300kb -strip -quality 90 -scale 90% *.jpg {} +

Сначала я конвертирую PNG в JPG, уменьшая его размер с 32 Мбайт до 5,8 Мбайт, и все остается прежним, но когда я использую третью команду, она удаляет цвет фона в изображении и создает это оттенки серого как бы размытые.

Тем не менее, текст по-прежнему читается, а цвета и фоновый логотип - нет.

Как я могу добиться этого с помощью convert, mogrify или любого другого инструмента? До сих пор я перепробовал все возможное.

This is part of original image

This is part of changed image after command

1
задан 8 August 2021 в 11:58

2 ответа

Я пытаюсь найти . -iname '*.png' -exec convert -resize 60% -quality 60 "*.jpg" {} + но это не работает.

Ссылка. https://superuser.com/questions/71028/batch-converting-png-to-jpg-in-linux

$ ls -1 *.png | xargs -n 1 bash -c 'convert -quality 60 "$0" "${0%.*}.jpg"'

Конвертирует мой пример 31MB.png в 1.4MB.jpg .... Возможно, вам придется повторить, например, $ ls -1 *.PNG | ... и т.д.

Ссылка на комментарий @steeldriver : "немного лучше xargs -d '\n' -n 1 "

2
ответ дан 20 August 2021 в 10:28

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

Это становится более заметным по мере увеличения уровня сжатия, что в точности то, что вы делаете. Кроме того, вы делаете это в два этапа:

  1. Сжатие без потерь (PNG) в сжатие с потерями (JPEG).
  2. С потерями из-за сжатия с потерями.

Вы , вероятно, получите лучший результат, перейдя без потерь к потерям в конечном качестве, таким образом применяя сжатие с потерями только один раз, например с использованием jpeg: extension = 300kb -strip -quality 90 -scale 90% в первом преобразовании.

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

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

Однако, что бы вы ни делали, сжатие из формата без потерь 30 МБ в формат с потерями 300 КБ приведет к заметному снижению качества.

4
ответ дан 20 August 2021 в 10:28

Другие вопросы по тегам:

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