Ошибка libpng warning iccp known incorrect srgb profile

Some applications treat warnings as errors; if you are using such an application, you do have to remove the chunk. You can do that with any variety of PNG editors, like ImageMagick.

With Windows CMD prompt, you will need to cd (change directory) into the folder with the images you want to focus on before you can use the commands listed below.

Libpng-1.6 is more stringent about checking ICC profiles than previous versions; you can ignore the warning. To get rid of it, remove the iCCP chunk from the PNG image.

convert in.png out.png

To remove the invalid iCCP chunk from all of the PNG files in a folder (directory), you can use mogrify from ImageMagick:

mogrify *.png

This requires that your ImageMagick was built with libpng16. You can easily check it by running:

convert -list format | grep PNG

If you’d like to find out which files need to be fixed instead of blindly processing all of them, you can run

pngcrush -n -q *.png

where the -n means don’t rewrite the files and -q means suppress most of the output except for warnings. Sorry, there’s no option yet in pngcrush to suppress everything but the warnings.

Note: You must have pngcrush installed.


Binary Releases of ImageMagick are here


For Android Projects (Android Studio) navigate into res folder.

For example:

C:{your_project_folder}appsrcmainresdrawable-hdpimogrify *.png

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

Pick a username
Email Address
Password

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account

ibpng-1.6 более жестко проверяет профили ICC, чем предыдущие. Вы можете игнорировать предупреждение. Чтобы избавиться от него, удалите кусок iCCP из изображения PNG.

Некоторые приложения (в моём случае OpenGL) рассматривают предупреждения как ошибки; если вы используете такое приложение, вам нужно удалить iCCP кусок из изображения PNG. Это можно сделать с помощью любого из множества редакторов PNG (по правде говоря стандартный paint в windows у меня не смог). Пример редактор ImageMagick’s : convert in.png out.png.

Что бы удалить дефектный кусок (iCCP) из всех файлов PNG лежащих в директории можно воспользоваться командой 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}appsrcmainresdrawable-hdpimogrify *.png


Используйте pngcrush чтобы удалить неправильный профиль sRGB из файла png:

 pngcrush -ow -rem allb -reduce file.png 
  • ow будет перезаписывать входной файл
  • rem allb удалит все вспомогательные куски, кроме tRNS и gAMA
  • reduce сохраняет цвет и глубину

На выходе консоли вы должны увидеть Removed the sRGB chunk. , и, возможно, больше сообщений об удалении кусков iCCP. В конечном итоге вы получите меньший оптимизированный файл png. Когда команда перезапишет исходный файл, обязательно создайте резервную копию или контроль версий (гит_хаб, тартуисеХГ и т.д.).


Решение (мне это вариант нравится потому что он в Qt-е :3 )

Не корректный файл может быть исправлен :

  1. Открываем картинку(некорректный файл) с помощью QPixmap::load
  2. Сохраняем картинку(уже корректный файл) на диск с помощью QPixmap::save

Примечание это решение использует Qt билиотеку.

Пример:

Вот минимальный пример, который я написал на C++, чтобы продемонстрировать, как реализовать предлагаемое решение:

QPixmap pixmap;
pixmap.load("badProfileImage.png");

QFile file("goodProfileImage.png");
file.open(QIODevice::WriteOnly);
pixmap.save(&file, "PNG");

Полный исходный код «GUI приложение», основано на этом примере, доступно в GitHub.


Вы можете исправить это в фотошопе…. У меня есть CC2015, но я уверен, что такая возможность присутствует во всех версиях.

  1. Откройте ваш .png файл
  2. File -> Save As и в открывшемся диалоговом окне снимите флажок «ICC Profile: sRGB IEC61966-2.1»
  3. снимите флажок «As a Copy»
  4. Смело сохраняйте свой «новый» оригинальный .png.
  5. Двигайтесь своей жизнью, зная, что вы удалили маленький кусочек зла из этого мира.

Я использовал функцию «mogrify * .png» ImageMagik. Однако у меня были изображения, зарытые в под папках, поэтому я использовал этот простой скрипт Python для применения ко всем изображениям во всех под папках и думал, что он может помочь другим людям:

import os
import subprocess

def system_call(args, cwd="."):
    print("Running '{}' in '{}'".format(str(args), cwd))
    subprocess.call(args, cwd=cwd)
    pass

def fix_image_files(root=os.curdir):
    for path, dirs, files in os.walk(os.path.abspath(root)):
        # sys.stdout.write('.')
        for dir in dirs:
            system_call("mogrify *.png", "{}".format(os.path.join(path, dir)))


fix_image_files(os.curdir)

Используя первый метод решения сего вопроса изменил вид запроса :

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.

./Installer/Images/installer_background.png:
Total length of data found in critical chunks = 11286
pngcrush: iCCP: Not recognizing known sRGB profile that has been edited

И для каждого из них, запустить mogrify, чтобы исправить их.

mogrify ./Installer/Images/installer_background.png

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

Я тестировал это на Windows с консолью Cygwin и оболочкой zsh. И еще спасибо первому варианту(автор которого глен ) за точное пояснение как эту проблему можно решить.


вот более простой способ исправить эту проблему с 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

Homebrew создаст фиксированную копию для каждого файла png в текущем каталоге и поместит его в подкаталог tmp. После этого, если все в порядке, вам просто нужно переопределить исходные файлы.

Иной совет- использовать приложения Keynote и Preview для создания иконок. Я рисую их, используя Keynote, размером около 120×120 пикселей, над слайдом с белым фоном (опция для редактирования многоугольников — это замечательно!). Перед экспортом в Preview я рисую прямоугольник вокруг значка (без заливки или тени, только контур размером около 135×135) и скопируйте все в буфер обмена. После этого вам просто нужно открыть его с помощью инструмента «Просмотр» с помощью «Создать из буфера обмена», выбрать область размером 128×128 пикселей вокруг значка, скопировать, снова использовать «Создать из буфера обмена» и экспортировать его в PNG. Вам не нужно будет запускать инструмент pngfix.


Используя программу просмотра изображений IrfanView в Windows, я просто сохранил изображение 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"

некоторые справочные данные по этому поводу:

Некоторые изменения в версии libpng 1.6+ приводят к тому, что он
выдаёт предупреждение или даже неправильно работает с исходным
профилем HP / MS sRGB, что приводит к следующему предупреждению
libpng warning: iCCP: known incorrect sRGB profile . Старый
профиль использует стандарт белой точки D50, когда в новом стандарте D65 является белой точкой .
Этот профиль не редкость, используеться в Adobe Photoshop, хотя он по
умолчанию не был встроен в изображения.

(источник: https://wiki.archlinux.org/index.php/Libpng_errors)

Обнаружение ошибок было улучшено в некоторых элементах.в частности, читатель
iCCP элемента теперь делает довольно полную проверку базового
формата.Некоторые неудачные профили, которые были ранее приняты,
теперь отклонены, в частности, очень старый сломанный профиль
Microsoft / HP sRGB. Требование спецификации PNG, что только
изображения с оттенками серого могут отображаться на изображениях с
типом цвета 0 или 4, и даже если изображение содержит только серые
пиксели, теперь применяются только профили RGB в изображениях с типом
цвета 2, 3 или 6. Элементу sRGB разрешено появляться на изображениях с
любым типом цвета.

(источник: https://forum.qt.io/topic/58638/solved-libpng-warning-iccp-known-incorrect-srgb-profile-drive-me-nuts/16)

When including .png converted with Photoshop CS6 to gray-scale I get a warning

«warning: pdflatex> libpng warning: iCCP: known incorrect sRGB profile«.

To be precise, I get 36 of these warnings. ;-)

What is the problem with these .png?

Community's user avatar

asked Jul 26, 2013 at 20:22

Benjamin Massow's user avatar

Benjamin MassowBenjamin Massow

9272 gold badges9 silver badges19 bronze badges

The newest libpng update (1.6.2 I believe?) has stricter rules about iCCP and will print this warning every time it finds a png that is broken. This warning can be ignored. Fixes would include:

  • Downgrade to a older version of libpng
  • Install imagemagick and convert all .png files with convert -strip (script below)
  • Maybe even just disable this warning?

In the end this is a problem that should be fixed by the maintainer of the code.

Script that would change all .png files in the current directory:

for f in $(find . -type f -name "*.png")
do
echo "Processing $f ..."
convert $f -strip $f
done

Community's user avatar

answered Jul 28, 2013 at 9:56

Tharre's user avatar

5

To strip all .png files with ImageMagick, you can simply run the following command

find . -type f -name "*.png" -exec convert {} -strip {} ;

answered Mar 28, 2014 at 0:25

Elviss Strazdins's user avatar

4

Saving the image with a lower bit depth will probably eliminate the problem altogether; since you have no real color variance and no alpha, 8-bit should look the same.

The reason is that with grayscale, you only really have 256 shades of gray with no RGB variance, and of course, no alpha.

answered Jul 29, 2013 at 4:10

formerBGIuser's user avatar

1

I found a workaround that may help.

I downloaded the ImageOptim software: https://imageoptim.com/ (Free)

and went to the folder Xamarin/Android.Support.v7.AppCompat/21.0.3/embedded and drag the images into the imageoptim and it deleted the metadata.

And that fixed.

karlkoeller's user avatar

karlkoeller

123k16 gold badges259 silver badges435 bronze badges

answered Aug 21, 2015 at 6:51

Yksh's user avatar

YkshYksh

1214 bronze badges

1

I am a Graphic Designer (not a coder so please excuss my ignorance) who was asked to save the image from Photoshop without sRGB profile to avoid this warning message by one of my colleagues.
The simplest solution I found is to: ‘Save for Web’ from Photoshop giving you far more options when saving a PNG than simply ‘Save As’ — within the addtional options you can simply untick the box for embeding the PNG with sRGB profile. Hope this is of some help to someone, it worked for us.

answered Oct 12, 2016 at 17:27

Lance's user avatar

LanceLance

211 bronze badge

You must log in to answer this question.

Not the answer you’re looking for? Browse other questions tagged

.

Вопрос:

Я пытаюсь загрузить изображение PNG с помощью SDL, но программа не работает, и эта ошибка появляется в консоли

Предупреждение libpng: iCCP: известен неправильный профиль sRGB

Почему появляется это предупреждение? Что я должен сделать, чтобы решить эту проблему?

Лучший ответ:

Libpng-1.6 более строг в проверке профилей ICC, чем предыдущие версии. Вы можете игнорировать предупреждение. Чтобы избавиться от него, удалите кусок iCCP из изображения PNG.

Некоторые приложения обрабатывают предупреждения как ошибки; Если вы используете такое приложение, вы должны удалить чанк. Вы можете сделать это с любым из множества редакторов PNG, таких как ImageMagick’s

convert in.png out.png

Чтобы удалить недействительный кусок iCCP из всех файлов PNG в папке (каталоге), вы можете использовать mogrify из ImageMagick:

mogrify *.png

Это требует, чтобы ваш ImageMagick был собран с libpng16. Вы можете легко проверить это, запустив:

convert -list format | grep PNG

Если вы хотите выяснить, какие файлы необходимо исправить, а не обрабатывать их вслепую, вы можете запустить

pngcrush -n -q *.png

где -n означает не переписывать файлы, а -q означает подавить большую часть вывода, за исключением предупреждений. Извините, в pngcrush пока нет возможности подавить все, кроме предупреждений.


Бинарные выпуски ImageMagick находятся здесь


Для проектов Android (Android Studio) перейдите в папку res.

Например:

C:{your_project_folder}appsrcmainresdrawable-hdpimogrify *.png

Ответ №1

Используйте pngcrush для удаления неправильного профиля sRGB из файла png:

pngcrush -ow -rem allb -reduce file.png
  • -ow перезапишет входной файл
  • -rem allb удалит все вспомогательные фрагменты, кроме tRNS и gAMA
  • -reduce выполняет уменьшение цвета без потерь или глубины цвета

В выводе консоли вы должны увидеть Removed the sRGB chunk и, возможно, больше сообщений об удалении чанка. В итоге вы получите меньший, оптимизированный файл PNG. Поскольку команда перезапишет исходный файл, обязательно создайте резервную копию или используйте контроль версий.

Ответ №2

Решение

Неправильный профиль может быть исправлен с помощью:

  1. Открытие изображения с неправильным профилем с помощью QPixmap :: load
  2. Сохранение изображения обратно на диск (уже с правильным профилем) с помощью QPixmap :: save

Примечание. В этом решении используется библиотека Qt.

пример

Вот минимальный пример, который я написал в C++, чтобы продемонстрировать, как реализовать предложенное решение:

QPixmap pixmap;
pixmap.load("badProfileImage.png");

QFile file("goodProfileImage.png");
file.open(QIODevice::WriteOnly);
pixmap.save(&file, "PNG");

Полный исходный код приложения с графическим интерфейсом на основе этого примера доступен на GitHub.

Ответ №3

Вы также можете исправить это в фотошопе… У меня есть CC2015, но я уверен, что это то же самое для всех версий.

  • Откройте файл .png.
  • Файл → Сохранить как и в диалоговом окне, который открывается снимите флажок “ICC-профиль: sRGB IEC61966-2.1”
  • Снимите флажок “Как копировать”.
  • Смело сохраняйте свой оригинальный .png.
  • Двигайтесь своей жизнью, зная, что вы удалили из этого всего лишь немного зла.

Ответ №4

Чтобы добавить Гленну отличный ответ, вот что я сделал, чтобы найти, какие файлы были неисправны:

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 поиск в выходных данных следующих строк: iCCP: Not recognizing known sRGB profile that has been edited.

./Installer/Images/installer_background.png:
Total length of data found in critical chunks            =     11286
pngcrush: iCCP: Not recognizing known sRGB profile that has been edited

И для каждого из них запустите mogrify, чтобы исправить их.

mogrify ./Installer/Images/installer_background.png

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

Я проверял это на Windows с консолью Cygwin и оболочкой zsh. Еще раз спасибо Гленну, который поставил большую часть вышеупомянутого, я просто добавляю ответ, поскольку его обычно легче найти, чем комментарии 🙂

Ответ №5

Благодаря фантастическому ответу Гленна, я использовал функциональность ImageMagik “mogrify *.png”. Однако у меня были изображения, спрятанные в подпапках, поэтому я использовал этот простой скрипт Python, чтобы применить его ко всем изображениям во всех подпапках и подумал, что это может помочь другим:

import os
import subprocess

def system_call(args, cwd="."):
print("Running '{}' in '{}'".format(str(args), cwd))
subprocess.call(args, cwd=cwd)
pass

def fix_image_files(root=os.curdir):
for path, dirs, files in os.walk(os.path.abspath(root)):
# sys.stdout.write('.')
for dir in dirs:
system_call("mogrify *.png", "{}".format(os.path.join(path, dir)))


fix_image_files(os.curdir)

Ответ №6

Существует более простой способ решить эту проблему с Mac OS и Homebrew:

Установите homebrew, если он еще не установлен

$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, размером около 120×120 пикселей, поверх слайда с белым фоном (возможность сделать редактируемые полигоны великолепной!). Перед экспортом в Preview я рисую прямоугольник вокруг значка (без заливки или тени, только контур, размером около 135×135) и копирую все в буфер обмена. После этого вам просто нужно открыть его с помощью инструмента “Просмотр”, используя “Новый из буфера обмена”, выделить область размером 128×128 пикселей вокруг значка, скопировать, снова использовать “Новый из буфера обмена” и экспортировать его в PNG. Вам не нужно запускать инструмент pngfix.

Ответ №7

некоторая справочная информация об этом:

Некоторые изменения в версии libpng 1.6+ вызывают предупреждение или даже неправильно работают с исходным профилем HP/MS sRGB, к следующему stderr: предупреждение libpng: iCCP: известный неправильный sRGB profile В старом профиле используется точка белого D50, где D65 является стандартным. Этот профиль не редкость, он используется Adobe Photoshop, хотя по умолчанию он не был встроен в изображения.

(источник: https://wiki.archlinux.org/index.php/Libpng_errors)

Обнаружение ошибок в некоторых кусках улучшилось; в частности, iCCP chunk reader теперь делает довольно полную проверку базового формата. Некоторые плохие профили, которые были ранее приняты, теперь отвергаются, в в частности, очень старый сломанный профиль Microsoft sRGB. Спецификация PNG что в изображениях могут отображаться только профили оттенков серого цвет 0 или 4, и даже если изображение содержит только серый цвет пикселей, только изображения RGB могут отображаться на изображениях с типом цвета 2, 3, или 6, теперь применяется. Блоку sRGB разрешено появляться в изображениях с любым типом цвета.

(источник: https://forum.qt.io/topic/58638/solved-libpng-warning-iccp-known-incorrect-srgb-profile-drive-me-nuts/16)

Ответ №8

Попробовав пару предложений на этой странице, я закончил использование решения pngcrush. Вы можете использовать bash script ниже для рекурсивного обнаружения и исправления плохих png-профилей. Просто передайте ему полный путь к каталогу, который вы хотите найти для png файлов.

fixpng "/path/to/png/folder"

script:

#!/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"

Ответ №9

Используя программу просмотра изображений IrfanView в Windows, я просто сохранил изображение PNG, и это исправило проблему.

Ответ №10

Расширяя решение friederbluemle, загрузите pngcrush и затем используйте код, подобный этому, если вы запускаете его для нескольких файлов png

path =r"C:\project\project\images" # path to all .png images
import os

png_files =[]

for dirpath, subdirs, files in os.walk(path):
for x in files:
if x.endswith(".png"):
png_files.append(os.path.join(dirpath, x))

file =r'C:\Users\user\Downloads\pngcrush_1_8_9_w64.exe' #pngcrush file


for name in png_files:
cmd = r'{} -ow -rem allb -reduce {}'.format(file,name)
os.system(cmd)

здесь все png файлы, относящиеся к проектам, находятся в 1 папке.

Ответ №11

Вот смехотворный ответ грубой силы:

Я изменил gradlew script. Вот моя новая команда exec в конце файла в

exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" **| grep -v "libpng warning:"**

Понравилась статья? Поделить с друзьями:
  • Ошибка libparted невозможно создавать пересекающиеся разделы
  • Ошибка libmtp could not send object info
  • Ошибка libmtp could not open source file
  • Ошибка libmtp could not get file from device
  • Ошибка lexus is 250 check vsc