Libpng warning iccp crc error

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

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

122k15 gold badges252 silver badges433 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

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)

Bug #71316 libpng warning from imagecreatefromstring
Submitted: 2016-01-08 22:07 UTC Modified: 2021-10-21 16:40 UTC
Votes: 24
Avg. Score: 3.8 ± 0.9
Reproduced: 23 of 23 (100.0%)
Same Version: 0 (0.0%)
Same OS: 1 (4.3%)
From: humbads at alum dot mit dot edu Assigned: cmb (profile)
Status: Closed Package: GD related
PHP Version: 5.6.17 OS: FreeBSD 10.2
Private report: No CVE-ID: None

 [2016-01-08 22:07 UTC] humbads at alum dot mit dot edu

Description:
------------
imagecreatefromstring is writing a warning message to stderr that can not be suppressed by '@' or captured by the error handler.  It should emit a proper PHP warning instead.

I have the following version of libPNG:

php -i | grep -i libpng
libPNG Version => 1.6.19+apng

To run the test script, download the sample PNG image from here:
http://imgbox.com/BzOXLiOr

Note: libPNG 1.5.18 on PHP 5.6.17 for Windows does not have this problem.

Test script:
---------------
php -r '@var_dump(imagecreatefromstring(file_get_contents("1CCHOHSULGF78KW.png")));' 


Expected result:
----------------
resource(6) of type (gd)

Actual result:
--------------
libpng warning: iCCP: known incorrect sRGB profile
resource(6) of type (gd)

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports

 [2016-01-10 01:48 UTC] pajoye@php.net

-Assigned To:
+Assigned To: pajoye

 [2016-01-10 01:48 UTC] pajoye@php.net

Thanks for your report!

Hm. This is a libpng warning.I suppose they move this warning to a simple warning level. 

I will see if we can implement the warning only callback without introducing too much noises:

 png_structp png_create_read_struct(png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warn_fn);

only png_error is used now and generates php error.

 [2016-07-17 21:57 UTC] michael dot hartmann at refx dot com

PHP 7.0.8 x64 on Windows. Same problem. Please fix.

 [2017-10-24 07:38 UTC] kalle@php.net

-Status: Assigned
+Status: Open
-Assigned To: pajoye
+Assigned To:

 [2018-07-13 08:31 UTC] divinity76+spam at gmail dot com

can reproduce on php 7.1.17 @ ubuntu 17.10  (aka i inconveniently encountered this bug)

 [2018-07-13 09:29 UTC] divinity76 at gmail dot com

can't be captured with ob_start() either, does anybody have a workaround?

 [2020-07-10 10:35 UTC] bugreports2 at gmail dot com

this just sucks wehn you verify that some file is really a png and get spewed by this messages (and no fileinfo is useless given that many errors it makes over years)

libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: Interlace handling should be turned on when using png_read_image
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: CRC error

 [2020-11-04 19:47 UTC] humbads at alum dot mit dot edu

Here is a workaround for the "libpng warning: Interlace handling should be turned on when using png_read_image" warnings emitted to stdout.

$command = "mogrify -interlace none *.png";
exec($command);

Call this prior to calling imagecreatefromstring.

 [2020-11-04 19:50 UTC] rtrtrtrtrt at dfdfdfdf dot dfd

amazing for how many years random shit don't get fixed and no i don't care who and where is resposnible

 [2021-07-23 09:19 UTC] cmb@php.net

> amazing for how many years random shit don't get fixed and no i
> don't care who and where is resposnible

Thanks for your valuable open-source contribution.

 [2021-09-02 06:14 UTC] 2598059791 at qq dot com

$imgInfo = getimagesize($imageFile);
        $img_w = $imgInfo[0];
        $img_h = $imgInfo[1];

        switch ($imgInfo[2]){
            case 1:
                $bgImg =imagecreatefromgif($imageFile);  //gif
                break;
            case 2:
                $bgImg =imagecreatefromjpeg($imageFile); //jpg
                break;
            case 3:
                $bgImg = imagecreatefrompng($imageFile);  //png
                break;
            default:
                die("不支持的图片文件类型");
                exit;
        }
        $fontfile = ROOT_DIR.'/../../Resources/font/simhei.ttf';
        $fontfile = ROOT_DIR.'/font/simhei.ttf';
        if(file_exists($fontfile)){
            echo $imageFile."nn";
        }
        $text_color = imagecolorallocatealpha($bgImg,0,0,0,75);
        $pos_x = 30;
        $pos_y = $img_h - 20;
        imagettftext($bgImg, 12, 0, $pos_x, $pos_y, $text_color, $fontfile, '审核药师:');
        $shenhe_img = imagecreatefrompng( ROOT_DIR.'/yaoshi/'.$shenhe );
        $shenheImgInfo = getimagesize( ROOT_DIR.'/yaoshi/'.$shenhe );
        $resize_h = 35;
        $resize_w = intval($shenheImgInfo[0]*$resize_h/$shenheImgInfo[1]);
        $pos_x = 110;
        $pos_y = $img_h-$resize_h-5;
        imagecopyresized($bgImg, $shenhe_img, $pos_x, $pos_y, 0, 0, $resize_w, $resize_h, $shenheImgInfo[0], $shenheImgInfo[1]);

 [2021-10-21 16:40 UTC] cmb@php.net

-Assigned To:
+Assigned To: cmb

 [2021-11-04 10:22 UTC] git@php.net

-Status: Assigned
+Status: Closed


Я пытаюсь загрузить изображение 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







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

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

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






Решение

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

  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 .

ОБНОВЛЕНИЕ ОТ 05.12.2019: Ответ был и остается в силе, однако в приложении с графическим интерфейсом, которым я поделился на GitHub, была ошибка, из-за которой выходное изображение было пустым. Я только что исправил это и извиняюсь за неудобство!



Вы также можете просто исправить это в фотошопе …

  1. Откройте ваш .png файл.
  2. Файл -> Сохранить как и в открывшемся диалоговом окне снимите флажок «Профиль ICC: sRGB IEC61966-2.1»
  3. Снимите флажок «Как копия».
  4. Смело сохраняйте свои исходные файлы .png.
  5. Двигайтесь дальше по жизни, зная, что вы удалили лишь немного зла из мира.

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

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. Еще раз спасибо Гленну, который поставил большую часть всего вышеперечисленного, я просто добавляю ответ, поскольку его обычно легче найти, чем комментарии :)



Благодаря фантастической ответ от Гленн , я использовал ImageMagik „mogrify * .png“ функциональность «s. Однако у меня были изображения, спрятанные в подпапках, поэтому я использовал этот простой скрипт 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)




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






Попробовав пару предложений на этой странице, я решил использовать решение 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, что приводит к следующему stderr: предупреждение libpng: iCCP: известен неправильный профиль sRGB Старый профиль использует точку белого D50, где D65 является стандартным. Этот профиль нередко используется Adobe Photoshop, хотя по умолчанию он не был встроен в изображения.

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

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

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


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


Расширяя решение 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 папке.


Я запустил эти две команды в корне проекта и исправил его.

В основном перенаправьте вывод команды «find» в текстовый файл, чтобы использовать его в качестве списка файлов для обработки. Затем вы можете прочитать этот текстовый файл в «mogrify», используя флаг «@»:

find * .png -mtime -1> list.txt

mogrify — изменить размер 50% @ list.txt

Это позволит использовать «find», чтобы получить все * .png изображения, которые были выпущены ранее, чем за 1 день, и распечатать их в файл с именем «list.txt». Затем «mogrify» читает этот список, обрабатывает изображения и перезаписывает оригиналы версиями с измененным размером. Могут быть небольшие различия в поведении «find» от одной системы к другой, поэтому вам придется проверить страницу руководства для точного использования.


Вот нелепый грубый ответ:

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

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

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

122k15 gold badges252 silver badges433 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

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Libguestfs error mount unsupported filesystem type
  • Libgl error mesa loader failed to open radeonsi
  • Libgl error mesa loader failed to open iris
  • Libgl error failed to load driver swrast debian
  • Libgl error failed to load driver nouveau

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии