libpng 경고 : iCCP : 알려진 잘못된 sRGB 프로파일 않고이 오류가 콘솔에 나타납니다. libpng 경고

SDL을 사용하여 PNG 이미지를로드하려고하는데 프로그램이 작동하지 않고이 오류가 콘솔에 나타납니다.

libpng 경고 : iCCP : 알려진 잘못된 sRGB 프로파일

이 경고가 나타나는 이유는 무엇입니까? 이 문제를 해결하려면 어떻게해야합니까?



답변

Libpng-1.6은 이전 버전보다 ICC 프로파일을 확인하는 데 더 엄격합니다. 경고를 무시해도됩니다. 이를 제거하려면 PNG 이미지에서 iCCP 청크를 제거하십시오.

일부 응용 프로그램은 경고를 오류로 취급합니다. 이러한 응용 프로그램을 사용하는 경우 청크를 제거해야합니다. ImageMagick과 같은 다양한 PNG 편집기로이를 수행 할 수 있습니다.

convert in.png out.png

폴더 (디렉토리)의 모든 PNG 파일에서 잘못된 iCCP 청크를 제거하려면 mogrifyImageMagick에서 사용할 수 있습니다 .

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}\app\src\main\res\drawable-hdpi\mogrify *.png

답변

pngcrushpng 파일에서 잘못된 sRGB 프로파일을 제거하는 데 사용하십시오 .

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");

이 예제를 기반으로 한 GUI 애플리케이션의 전체 소스 코드는 GitHub에서 사용 가능합니다 .

UPDATE FROM 05.12.2019 : 대답은 유효하고 여전히 유효하지만 GitHub에서 공유 한 GUI 응용 프로그램에 버그가있어 출력 이미지가 비어 있습니다. 방금 수정하여 불편을 드려 죄송합니다.


답변

당신은 또한 포토샵에서 이것을 고칠 수 있습니다 …

  1. .png 파일을여십시오.
  2. 파일-> 다른 이름으로 저장 및 대화 상자가 열리면 “ICC 프로파일 : sRGB IEC61966-2.1″을 선택 취소하십시오.
  3. “사본으로”를 선택 해제하십시오.
  4. 원본 .png를 용감하게 저장하십시오.
  5. 당신이 세상에서 그 작은 악을 제거했다는 것을 알고 당신의 인생을 계속하십시오.

답변

Glenn의 훌륭한 답변을 추가하기 위해 결함이있는 파일을 찾기 위해 수행 한 작업은 다음과 같습니다.

find . -name "*.png" -type f -print0 | xargs \
       -0 pngcrush_1_8_8_w64.exe -n -q > pngError.txt 2>&1

pngcrush가 많은 인수를 처리 할 수 ​​없기 때문에 find와 xargs를 사용했습니다 (에 의해 반환 된 **/*.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 파일을 변경하지 못하게됩니다. 또한 결함이있는 파일을 정확하게 표시하는 이점이 있습니다.

Cygwin 콘솔 과 zsh 셸을 사용하여 Windows에서 이것을 테스트했습니다 . 위의 대부분을 넣은 Glenn 에게 다시 감사드립니다. 평소 의견보다 찾기가 더 쉽기 때문에 대답을 추가하고 있습니다. 🙂


답변

받는 사람 덕분에 환상적인 대답 에서 글렌은 , 내가 사용하는 이미지 매직 의 “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)

답변

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 응용 프로그램을 사용하여 아이콘을 만드는 것입니다. 나는 약 120×120 픽셀 크기의 Keynote를 사용하여 흰색 배경의 슬라이드 위에 그립니다 (다각형을 편집 가능하게 만드는 옵션은 훌륭합니다!). 미리보기로 내보내기 전에 아이콘 주위에 사각형을 그립니다 (채우기 또는 그림자 없음, 윤곽선, 약 135×135 크기). 모든 것을 클립 보드에 복사합니다. 그런 다음 “클립 보드에서 새로 만들기”를 사용하여 미리보기 도구로 이미지를 열고 아이콘 주위에서 128×128 픽셀 영역을 선택한 다음 복사하고 “클립 보드에서 새로 만들기”를 다시 사용하여 PNG로 내 보내면됩니다. pngfix 도구를 실행할 필요가 없습니다.