У этого вопроса уже есть некоторые удивительные ответы, но я хотел добавить, что если ваш исполняемый файл находится в PATH, и вы получаете очень разные выходы, когда вы запускаете
./executable
в те, которые вы получаете если вы запустите
executable
(допустим, вы запускаете сообщения об ошибках с одним, а не другим), тогда проблема может заключаться в том, что на вашем компьютере есть две разные версии исполняемого файла: одна на путь, а другой нет.
Проверьте это, выполнив
, какой исполняемый файл
и
whereis executable
Он исправил мои проблемы ... У меня было три версии исполняемого файла, только один из которых был правильно скомпилирован для среды.
Libpng-1.6 более жестко проверяет профили ICC, чем предыдущие версии. Вы можете игнорировать предупреждение. Чтобы избавиться от него, удалите кусок iCCP из изображения PNG.
Некоторые приложения рассматривают предупреждения как ошибки; если вы используете такое приложение, вам нужно удалить кусок. Вы можете сделать это с помощью любого из различных редакторов PNG, таких как ImageMagick convert in.png out.png
.
Чтобы удалить недопустимый кусок iCCP из всех файлов PNG в папке (папке), вы можете использовать ImageMagick mogrify *.png
, при условии, что ваш ImageMagick был создан с помощью libpng16 (запустите convert -list format | grep PNG
, чтобы быть уверенным в этом).
Если вы хотите узнать, какие файлы нужно исправлять, а не слепо обрабатывать все их, вы можете запустить мой pngcrush -n -q *.png
, где «-n
» означает, что вы не переписываете файлы, а «-q
» означает подавление большей части вывода, за исключением предупреждений. К сожалению, в pngcrush еще нет опции для подавления всего, кроме предупреждений.
Двоичные релизы ImageMagick здесь
Для Android Проекты (Android Studio) переходят в папку res.
Например: C:\AndroidProjects\{your_project_folder}\app\src\main\res\drawable-hdpi\mogrify *.png
Существует более простой способ исправить эту проблему с Mac OS с помощью Homebrew:
-> install homebrew if it is not installed yet
$brew install libpng
$pngfix --strip=color --out=file2.png file.png
или сделать это с каждым файлом в текущем каталоге:
mkdir tmp; for f in ./*.png; do pngfix --strip=color --out=tmp/"$f" "$f"; done
Он создаст фиксированную копию для каждого файла png в текущем каталоге и поместит его в подкаталог tmp. После этого, если все в порядке, вам просто нужно переопределить исходные файлы.
Еще один совет - использовать приложения Keynote и Preview для создания значков. Я рисую их, используя Keynote, размером около 120x120 пикселей, над слайдом с белым фоном (опция для редактирования многоугольников - это замечательно!). Перед экспортом в Preview я рисую прямоугольник вокруг значка (без заливки или тени, только контур размером около 135x135) и скопируйте все в буфер обмена. После этого вам просто нужно открыть его с помощью инструмента «Просмотр» с помощью «Создать из буфера обмена», выбрать область размером 128x128 пикселей вокруг значка, скопировать, снова использовать «Создать из буфера обмена» и экспортировать его в PNG. Вам не нужно будет запускать инструмент pngfix.
Чтобы добавить к большому ответу Гленна, вот что я сделал, чтобы найти файлы, которые были неисправны:
find . -name "*.png" -type f -print0 | xargs -0 pngcrush_1_8_8_w64.exe -n -q > pngError.txt 2>&1
Я использовал find и xargs, потому что pngcrush не мог обрабатывать множество аргументов (которые были возвращены **/*.png
). -print0
и -0
необходимы для обработки имен файлов, содержащих пробелы.
Затем выполните поиск в выводах для этих строк: iCCP: Not recognizing known sRGB profile that has been edited
.
./ Установщик /Images/installer_background.png: Общая длина данных, найденных в критических фрагментах = 11286 pngcrush: iCCP: не распознается известный профиль sRGB, который был отредактирован
blockquote>И для каждого из них запустите mogrify on это исправление.
mogrify ./Installer/Images/installer_background.png
Выполнение этого предотвращает возможность фиксации каждого отдельного файла png в репозитории, когда только некоторые из них действительно были изменены. Кроме того, у него есть преимущество, чтобы точно показать, какие файлы были неисправны.
Я тестировал это на Windows с консолью Cygwin и оболочкой zsh. Еще раз спасибо Glenn , который поставил большинство из вышеперечисленного, я просто добавляю ответ, поскольку его обычно легче найти, чем комментарии:)
Используйте pngcrush
, чтобы удалить неправильный профиль sRGB из файла png:
pngcrush -ow -rem allb -reduce file.png
-ow
перезапишет входной файл -rem allb
удалит все вспомогательные фрагменты, кроме tRNS и gAMA -reduce
делает уменьшение цвета или уменьшение глубины резкости На выход консоли вы должны увидеть Removed the sRGB chunk.
и, возможно, больше сообщений об удалении фрагментов. В конечном итоге вы получите меньший оптимизированный файл png. Когда команда перезапишет исходный файл, убедитесь, что вы создали резервную копию или используете управление версиями.
некоторая справочная информация об этом:
Некоторые изменения в версии libpng 1.6+ заставляют ее выдавать предупреждение или даже неправильно работать с исходным профилем HP / MS sRGB, что приводит к следующему stderr: предупреждение libpng: iCCP: известный неправильный профиль sRGB. В старом профиле используется точка белого D50, где D65 является стандартным. Этот профиль не редкость, он используется Adobe Photoshop, хотя по умолчанию он не был встроен в изображения.
blockquote>(источник: https://wiki.archlinux.org/index .php / Libpng_errors )
Обнаружение ошибок в некоторых кусках улучшилось; в частности, читатель iCCP chunk теперь делает довольно полную проверку базового формата. Некоторые неудачные профили, которые были ранее приняты, теперь отклонены, в частности, очень старый сломанный профиль Microsoft / HP sRGB. Требование спецификации PNG, что только изображения с оттенками серого могут отображаться на изображениях с типом цвета 0 или 4, и даже если изображение содержит только серые пиксели, теперь применяются только профили RGB в изображениях с типом цвета 2, 3 или 6. Часть sRGB разрешается появляться на изображениях с любым типом цвета.
blockquote>(источник: https://forum.qt.io/topic/58638/solved-libpng-warning -iccp известно, некорректный-SRGB-профиль-диск-я-орехи / 16 )
Вот смехотворный ответ грубой силы:
Я изменил сценарий gradlew. Вот моя новая команда exec в конце файла в
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" **| grep -v "libpng warning:"**
Используя средство просмотра изображений IrfanView в Windows, я просто сохранил изображение PNG и исправил проблему.
Еще один простой способ для программистов, использующих Qt и C ++, - написать свою собственную небольшую утилиту в форме виджета Qt или консольного приложения для исправления профиля:
QPixmap pixmap;
pixmap.load("badProfileImage.png");
QFile file("goodProfileImage.png");
file.open(QIODevice::WriteOnly);
pixmap.save(&file, "PNG");
Попробовав пару предложений на этой странице, я закончил использование решения pngcrush. Вы можете использовать скрипт bash ниже для рекурсивного обнаружения и исправления плохих профилей png. Просто передайте ему полный путь к каталогу, который вы хотите найти для png-файлов.
fixpng "/path/to/png/folder"
Сценарий:
#!/bin/bash
FILES=$(find "$1" -type f -iname '*.png')
FIXED=0
for f in $FILES; do
WARN=$(pngcrush -n -warn "$f" 2>&1)
if [[ "$WARN" == *"PCS illuminant is not D50"* ]] || [[ "$WARN" == *"known incorrect sRGB profile"* ]]; then
pngcrush -s -ow -rem allb -reduce "$f"
FIXED=$((FIXED + 1))
fi
done
echo "$FIXED errors fixed"
Вы также можете исправить это в фотошопе ... У меня есть CC2015, но я уверен, что это то же самое для всех версий.