Libpng warning iccp known incorrect srgb profile pygame как исправить

fixing ‘libpng warning: iCCP: known incorrect sRGB profile’ appears in Pygame.

Libpng warning: iCCP: known incorrect sRGB profile.

Some .png images used in pygame may get the warning read as “libpng warning: iCCP: known incorrect sRGB profile”. To solve this I have searched and found the solution by using ImageMagick. After installing, single file can be fixed by calling convert <in_img> -strip <out_img>, but to make it fixes every wanted images in path we’ll need to modify just a little bit.

Create .bat file contains the following code and place this .bat in the folder that want to be fixed and run to finish it out.

@echo off
ping -n 2 127.0.0.1 > nul

echo this batch will convert ".png" using -strip option from ImageMagick.
echo please make sure you place a batch file in the right location.

ping -n 1 127.0.0.1 > nul

for %%i in (*.png) do identify %%i
for %%i in (*.png) do convert %%i -strip %%i
for %%i in (*.png) do identify %%i

echo finish..

ping -n 2 127.0.0.1 > nul
set /P user_input=Press any key to terminate...

Using pygame to load png, there are problems with libpng warning: iCCP: known incorrect sRGB profile and Interlace handling should be turned on when using png_read_image

In the process of using Python to implement reinforcement learning to walk the maze, I used pygame to load the png image drawn by PS. After executing the code, a red warning caused by the png image appeared. The reason is that the new version of libpng has enhanced the check. Only attach the relevant code for this problem:
(1) Define string related parameters in the config.py file

# Picture path
class Img:
	normal = "imgs/normal.png"
	active = "imgs/active.png"
	down = "imgs/down.png"

(2) Load the picture file in the maze_ui.py file

# Use pygame to load image files
normal = py.image.load(Img.normal).convert()
active = py.image.load(Img.active).convert()
down = py.image.load(Img.down).convert()

After the program is executed, there are three consecutive warnings as follows (because I have loaded 3 png images):
warning screenshoot
Although the warning does not affect the normal operation of the program, it is still uncomfortable to see a bunch of red on the console. I found the reason for this warning on the pygame official website and realized that it was For small bugs in pygame, the official statement is that developers temporarily ignore this warning.
I am here(Thanks to the blogger for the proposal) Find a way to modify the picture, comeSolve the Interlace handling should be turned on when using png_read_image. After opening the png image with PS and saving it, check the interlace option “None”, The compression options above do not matter.

In this way, the saved png image will replace the original one, and the red warning in the second line will no longer appear (pro-test effective!) After the operation, the result of execution again is as shown in the figure:
bug screenshoot2
I can see that this solution did not succeed in solving the first line of libpng warning: iCCP: known incorrect sRGB profile warning. I found a solution to this warning in stack OverFlow.
(I suggest that if you have any questions, domestic CSDN or other websites can’t be found, just go to this website to search and search.https://stackoverflow.com/)
 stack OverFlow
forlibpng warning: iCCP: known incorrect sRGB profile, The solution of this foreign netizen isConvert png-24 picture to png-8 format (24-bit true color format is converted to 8-bit grayscale picture), This needs to be changed with a picture editor, there is a tool ImageMagick can achieve (I did not try this, because the external network is really slow to open)

(download link:https://imagemagick.org/script/download.php)

More detailed instructions on the use of ImageMagick (including batch processing)

Although I did not download this tool successfully, but this warning I am sure the problem is that the png image is in 24-bit true color format.

Because the png image was drawn by myself using PS, when creating a new file in PS, I chose to create an image in rgb, 8-bit format (that is, rgb*8=24-bit).

The warning means: an incorrect sRGB configuration file is known. The configuration file here should mean that the image file format does not match the expected format in libpng.

According to the plan of foreign netizens in the above picture, it is necessary to convert 24-bit true color pictures to 8-bit grayscale pictures.If you draw a png picture by yourself, don’t choose rgb, 8-bit format to create a picture file when you first create a new one with PS! ! ! Be sure to select grayscale directly in the rgb column, and select 8-bit! ! ! Otherwise, the image format conversion can only be done later!

These two steps should be one of the most common methods, but the first step is to use PS to modify and save the picture to solve the disadvantage. If a large number of png pictures are loaded in the project and warnings like this are displayed, it is impossible to choose This kind of scheme.

Here is a solution to use Qt in Python development. Use QImage to read the picture and then save it back (currently pygame has not found a solution to solve the png image format problem through code traversal, because the official pygame also made it clear that this is a bug)

from PyQt5.QtGui import *
import os

img = QImage()
path = "./imgs"		# Pay attention to the filling of the project path where the picture is located, and change it according to your own situation (you can check the path filling rules if you don’t understand it)
for root, dirs, files in os.walk(path):
    for name in files:
        print(name)
        if name.endswith(".png"):
            img.load("./imgs/" + name)	#Pay attention to the path
            img.save("./imgs/" + name)

If there are many pictures and the above solutions are invalid, here are a few more articles to see their solutions, I hope it will help you:

(1) Batch processing with the help of image conversion tool
Libpng warning: iCCP: proof incorrect sRGB profile solution

(2) This problem occurs when executing programs under Ubuntu system:

https://serverfault.com/questions/970102/libpng-warning-interlace-handling-should-be-turned-on-when-using-png-read-image(This answer is more formal, but it is also unresolved the first line of the warning about the image rgb: libpng warning: iCCP: known incorrect sRGB profile, you can also try the ImageMagick tool under the Ubuntu system to convert the image format to solve it)

Thanks again for the different solutions of the above link bloggers!

stranger2287

1 / 0 / 1

Регистрация: 03.05.2020

Сообщений: 34

1

16.10.2020, 17:19. Показов 5574. Ответов 3

Метки icc, rgb, Игра, проблема (Все метки)


Студворк — интернет-сервис помощи студентам

Пытаюсь написать мини игру, подключил спрайты, запуска, чтобы проверить, что они выводятся на экран и тут ошибка:
libpng warning: iCCP: known incorrect sRGB profile
КОД:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import pygame
 
pygame.init()
win = pygame.display.set_mode((500, 500))
 
pygame.display.set_caption("Cubes Game")
 
walkRight = [pygame.image.load('right1.png'),
pygame.image.load('right2.png'), pygame.image.load('right3.png'),
pygame.image.load('right4.png'), pygame.image.load('right6.png'),
pygame.image.load('right7.png')]
 
walkLeft = [pygame.image.load('left1.png'),
pygame.image.load('left2.png'), pygame.image.load('left3.png'),
pygame.image.load('left5.png'), pygame.image.load('left6.png'),
pygame.image.load('left7.png')]
 
bg = pygame.image.load('bg.png')
playerStand = pygame.image.load('left1.png')
 
x = 50
y = 425
width = 60
height = 71
speed = 5
 
isJump = False
jumpCount = 1
 
left = False
right = False
animCount = 0
 
def drawWindow():
    global animCount
    win.blit(bg, (0, 0))
    pygame.display.update()
 
run = True
while run:
    pygame.time.delay(50)
 
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
 
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and x > 5:
        x -= speed
    if keys[pygame.K_RIGHT] and x < 500 - width - 15:
        x += speed
    if not(isJump):
 
        if keys[pygame.K_SPACE]:
            isJump = True
    else:
        if jumpCount >= -10:
            if jumpCount < 0:
                y += (jumpCount ** 2)/2
            else:
                y -= (jumpCount ** 2)/2
            jumpCount -= 1
        else:
            isJump = False
            jumpCount = 10
 
 
 
pygame.quit()



0



1 / 0 / 1

Регистрация: 01.06.2019

Сообщений: 61

17.10.2020, 23:05

2

Подозреваю что проблема в этом месте win.blit(bg, (0, 0)) Цвет состоит из 3 значений RED GREEN BLUE а у вас только 2 значения, вот он и ругается.



0



1 / 0 / 1

Регистрация: 03.05.2020

Сообщений: 34

23.10.2020, 16:06

 [ТС]

3

Kxarog, не, здесь (0, 0) это координаты откуда начинается прорисовываться задний фон



0



1 / 0 / 1

Регистрация: 01.06.2019

Сообщений: 61

24.10.2020, 12:56

4

Да тупанул посмотрел мельком, посмотрел повнимательнее скопировал ваш код, пришлось заливать свои текстуры(я теперь понимаю почему tooru ругался на меня когда я выкладывал код без текстур) У меня такой ошибки нет(хотя код все равно не рабочий) + погуглив подозреваю что дело в ваших текстурах. Я не спец (да че уж там полный нубас), но могу предложить вам сделать 2 варианта
1) Пересоздать ваши картинки в пнг
2) Попробовать загрузить картинки не в пнг формате а в другом
+ как я уже сказа код все равно не рабочий(будет тупо черный экран). И вот тут самое веселое, оказывается я уже отвечал на одну тему почти с таким же кодом
Проблема с добавлением фона и персонажей
Прям судьбоносная встреча…



0



Когда я запускаю свою программу, это дает мне следующее предупреждение:

libpng warning: iCCP: known incorrect sRGB profile

Я знаю, почему это вызвано, sRGB – это то, что он хочет, но я использую Adobe Photoshop RGB.

Просто интересно, есть ли какой-либо код для отключения предупреждения. Это не влияет на мою программу. Это просто раздражает.

Любая помощь будет принята с благодарностью!

(Пожалуйста, не просите меня показать мой код, мой код не имеет ничего общего с этой ситуацией)

20 июнь 2014, в 20:44

Поделиться

Источник

1 ответ

ну, вы можете игнорировать предупреждение.
Я использую ImageMagick для изменения размера изображения, а для некоторого png файла следующий код будет генерировать исключение:
iCCP: известный неправильный профиль sRGB `@@warning/png.c/MagickPNGWarningHandler/1830

Blob ablob(cont.data(), cont.size()); // cont is the png file content.
Image image;
image.read(ablob);
image.resize( Geometry(100, 100) );

Как говорится, это просто предупреждение, вы можете поместить image.read(ablob) в блок try {} catch {} и игнорировать исключение. Изображение объекта теперь содержит интегрированные данные png и может управляться правильно.

sparkling
30 дек. 2014, в 06:40

Поделиться

Ещё вопросы

  • 0Jquery меню не прячется при отпускании мыши
  • 1Проблема с WebView на сайте Youtube в Android?
  • 0горячий, чтобы получить значение радио кнопки в группе
  • 0Переместить div горизонтально, а затем вертикально
  • 0При первом нажатии CSS3 работает, но при втором не работает, почему?
  • 1Android LinearLayout не выглядит одинаково на реальном устройстве
  • 0Как обнаружить тег изображения в AngularJS?
  • 0Как обернуть группу тегов HTML в содержащий тег, используя JavaScript?
  • 1Строковый параметр слишком длинный. извлечение данных из базы данных в шаблон слова
  • 0Как найти количество тегов Div в HTML-файл в IOS?
  • 1Свободный запрос за пределами просроченного соединения
  • 0Как вычесть количество моих продуктов, перечисленных в списке, непосредственно в мою базу данных продуктов? (Баз данных)
  • 0Полная ширина фона внутри div
  • 1Microsoft Speech Platform – как обновить правила во время выполнения
  • 1преобразование значения java двухмерного массива (буквы) в целое число (число)
  • 0HTML-теги не работают для моего цикла for
  • 0Mysql выберите запрос не работает должным образом
  • 0AngularJS не отправляет данные через POST
  • 1Вывод процесса трубопровода в новый процесс
  • 1Javascript куки не работают
  • 1Превратить arraylist из строки в arraylist
  • 1Попросите alarmManager не отображать время и значок будильника на экране и сверху
  • 0Symfony 2.5.6 – исключение UnexpectedTypeException в пользовательском типе формы
  • 0PHP-флеш не работает
  • 1Использует ли функция Seaborn sns.load_dataset () реальные данные?
  • 1Как настроить ESLint, чтобы он запрещал экспорт по умолчанию
  • 1Java-сервлеты: проверка XML на xsd
  • 1рисование ограничительной рамки на больших изображениях
  • 1ArrayList в Arraylist удалить метод поведения
  • 0вернуть строку и избежать пустых полей внутри нее
  • 0OpenGL кадровый буфер зависит от размера окна
  • 0Вставить несколько строк в laravel с полезной нагрузкой JSON
  • 1Ускорение поиска в IndexedDB с несколькими работниками
  • 0Форма отправки onclick функции на ТД с php переменные отображаются
  • 1Сериализация туда-обратно хеш-карты не сохраняет порядок
  • 1Решить несколько запросов на повышение
  • 1Отображать изображения в сетке
  • 0процедурный запрос firebird выдавал ошибку «token unknown» в «SET TERM #;»
  • 0JQuery не возвращается успешно
  • 1Преобразовать строку в DateTime в C #
  • 1Как расширить несколько миксинов в одном элементе Polymer?
  • 0Простой селектор jQuery
  • 0mysqldump ошибка 1728 при автоматическом выполнении резервного копирования
  • 0Получение информации из нескольких источников с использованием MySQLI и возможность отображать результаты
  • 0Пользовательский интерфейс jQuery и сортировка по горизонтали – элементы, перемещаемые влево при перетаскивании
  • 0PHP – замена нескольких наборов заполнителей во время циклического перемещения по массивам
  • 1как ссылаться на дочерний элемент на клонированном элементе
  • 0Фронт-контроллер PHP и .htaccess с XAMPP и Windows
  • 1Замена всех элементов, кроме последнего, в определенных строках 2D-массива
  • 0Поместить плитки на границе контейнеров с изотопом?

Сообщество Overcoder

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)

Добавить комментарий