A Libpng-1.6 é mais rigorosa quanto à verificação de perfis ICC do que nas versões anteriores. Você pode ignorar o aviso. Para se livrar dele, remova o pedaço do iCCP da imagem PNG.
Alguns aplicativos tratam avisos como erros; se você estiver usando esse aplicativo, precisará remover o pedaço. Você pode fazer isso com vários editores PNG, como o ImageMagick's
convert in.png out.png
Para remover o bloco inválido do iCCP de todos os arquivos PNG em uma pasta (diretório), você pode usar o mogrifyImageMagick:
mogrify *.png
Isso requer que seu ImageMagick tenha sido construído com libpng16. Você pode verificá-lo facilmente executando:
convert -list format | grep PNG
Se você deseja descobrir quais arquivos precisam ser corrigidos, em vez de processá-los às cegas, é possível executar
pngcrush -n -q *.png
onde os -nmeios não reescrevem os arquivos e -qsuprimem a maior parte da saída, exceto os avisos. Desculpe, ainda não há opção no pngcrush para suprimir tudo, exceto os avisos.
Com o ImageMagick, você pode usar o comando -strip . Especificamente, usei o mogrify para afetar todas as imagens em uma pasta. Meu comando tinha a seguinte aparência
Maxito 25/11/2014
24
A opção -strip removerá todos os perfis. Se você omitir a opção -strip ( mogrify * .png ), apenas perfis incorretos serão excluídos.
Glenn Randers-Pehrson
2
Existe uma maneira de descobrir qual arquivo está acionando o aviso? A execução mogrify **/*.pngparece modificar todos os arquivos na árvore. Eu preferiria atualizar apenas a imagem com defeito.
Uflex
1
Use find . -type f -name '*.png' -execute mogrify \{\} \;para modificar recursivamente os .pngarquivos no diretório atual.
val diz Reintegrar Monica
Os binários do ImageMagick congelaram meu computador, talvez por trabalhar demais e depois de sair da noite para o dia, tivessem que reiniciar com força. Utilizou o aplicativo pngcrush para detectar o problema, conforme mencionado, -owpara substituir e corrigir o arquivo, além de reduzir o tamanho em cerca de 1/6! Só precisava obter o código fonte do programa para o meu mac, compilar, instalar manualmente e executá-lo. O GitHub Kjuly / pngcrush pode ter um binário pré-compilado, mas não tenho certeza. O Sourceforge parecia ter apenas o Windows exe disponível e o código-fonte. A resposta de friederbluemle parece fazer isso e muito mais.
Pysis
73
Use pngcrushpara remover o perfil sRGB incorreto do arquivo png:
pngcrush -ow -rem allb -reduce file.png
-ow substituirá o arquivo de entrada
-rem allb removerá todos os pedaços auxiliares, exceto tRNS e gAMA
-reduce reduz o tipo de cor sem perdas ou a profundidade de bits
Na saída do console, você deve ver Removed the sRGB chunke possivelmente mais mensagens sobre remoções de fragmentos. Você terminará com um arquivo PNG menor e otimizado. Como o comando substituirá o arquivo original, crie um backup ou use o controle de versão.
Isso funcionou! Faça isso recursivamente a partir da pasta atual, coloque-o em um arquivo .bat: Para / R %% i em (* .png) faça PNGCRUSH.EXE -ow -rem allb -reduce %% i
Andy Brice
13
E um one-liner para * nix para corrigir recursivamente todos os arquivos PNG no diretório atual: find . -type f -iname '*.png' -exec pngcrush -ow -rem allb -reduce {} \;(Testado em GNU / Linux)
friederbluemle
2
Acima da linha por frieder também funciona dentro do git bash no windows.
IKlsR 8/03
Pngcrush não remove este pedaço no meu caso. Mas o mogrify de imagemagick fez isso.
Nikos
25
Solução
O perfil incorreto pode ser corrigido por:
Abrindo a imagem com o perfil incorreto usando QPixmap :: load
Salvando a imagem de volta no disco (já com o perfil correto) usando QPixmap :: save
O código fonte completo de um aplicativo GUI baseado neste exemplo está disponível no GitHub .
ATUALIZAÇÃO DE 05.12.2019: A resposta foi e ainda é válida, no entanto, houve um erro no aplicativo GUI que compartilhei no GitHub, fazendo com que a imagem de saída fique vazia. Acabei de corrigir e peço desculpas pelo inconveniente!
Estou surpreso que esta resposta não tenha sido votada. Ele não requer a instalação de qualquer coisa e ele funciona ... o que mais se poderia pedir :)
Quantuple
17
Você também pode consertar isso no photoshop ...
Abra o seu arquivo .png.
Arquivo -> Salvar como e na caixa de diálogo exibida, desmarque "ICC Profile: sRGB IEC61966-2.1"
Desmarque "Como uma cópia".
Salve corajosamente o seu .png original.
Continue com sua vida sabendo que você removeu apenas um pouquinho do mal do mundo.
Eu usei o find e xargs porque o pngcrush não conseguiu lidar com muitos argumentos (retornados por **/*.png). O -print0e -0é necessário para manipular nomes de arquivos contendo espaços.
Em seguida, procure na saída para estas linhas: 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
E para cada um deles, execute o mogrify nele para corrigi-los.
Isso evita que uma confirmação altere todos os arquivos png no repositório quando apenas alguns foram realmente modificados. Além disso, tem a vantagem de mostrar exatamente quais arquivos estão com defeito.
Testei isso no Windows com um console Cygwin e um shell zsh. Mais uma vez obrigado a Glenn, que colocou a maioria dos itens acima, estou apenas adicionando uma resposta, pois geralmente é mais fácil encontrar do que comentários :)
No Debian, para encontrar os arquivos que eram problemáticos no meu software, eu usei find . -name "*.png" -exec sh -c 'echo Testing {} && pngcrush -n -q {}' \;Todo PNG incorreto irá gerar #pngcrush: iCCP: known incorrect sRGB profile
Gabriel Devillers
7
Graças à resposta fantástica de Glenn , usei a funcionalidade "mogrify * .png" do ImageMagik . No entanto, eu tinha imagens enterradas em subpastas, então usei esse script Python simples para aplicar isso a todas as imagens em todas as subpastas e pensei que isso poderia ajudar outras pessoas:
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)
Isso é bem multiplataforma, embora se você estiver em uma plataforma que suporte um bom shell * NIX-y como Zsh ou Bash, você pode apenas usá-lo mogrify **/*.png.
Kyle Strand
1
Sim, bom argumento. Eu usei apenas o Python porque desenvolvemos no Windows e Linux e queria comprometer esse script ao nosso repositório para uso futuro.
precisa
5
Existe uma maneira mais fácil de corrigir esse problema com o Mac OS e o Homebrew:
ou para fazê-lo com todos os arquivos no diretório atual:
mkdir tmp;for f in ./*.png; do pngfix --strip=color --out=tmp/"$f" "$f"; done
Ele criará uma cópia fixa para cada arquivo png no diretório atual e a colocará no subdiretório tmp. Depois disso, se tudo estiver OK, você precisará substituir os arquivos originais.
Outra dica é usar os aplicativos Keynote e Preview para criar os ícones. Eu os desenho usando o Keynote, no tamanho de cerca de 120x120 pixels, sobre um slide com fundo branco (a opção de tornar os polígonos editáveis é ótima!). Antes de exportar para a Visualização, desenhei um retângulo ao redor do ícone (sem preenchimento ou sombra, apenas o contorno, com o tamanho de 135x135) e copio tudo para a área de transferência. Depois disso, você só precisa abri-lo com a ferramenta Visualizar usando "Novo da área de transferência", selecione uma área de 128x128 pixels ao redor do ícone, copie, use "Novo da área de transferência" novamente e exporte-o para PNG. Você não precisará executar a ferramenta pngfix.
Não encontrei o pngfix na instalação padrão do OS El Capitan (ou talvez não tenha pesquisado o suficiente), mas o encontrei na instalação do MAMP que eu tinha. Funcionou perfeitamente! Obrigado! Aprovado
guido
Você está certo! Eu o instalei com o "brew install libpng" há muito tempo.
Adriel Jr
Eu obtive "n! Ew ERR 08, lendo Undefined_error: _0 Undefined_error: _0 not_a_PNG_ (too_short) car.png" ao executar isso na versão 10.13.2.
Mitch
@Itch Ainda funciona bem após a atualização para 10.13.6.
Adriel Jr
4
Depois de tentar algumas sugestões nesta página, acabei usando a solução pngcrush. Você pode usar o script bash abaixo para detectar e corrigir recursivamente perfis png incorretos. Basta passar o caminho completo para o diretório que você deseja procurar por arquivos png.
fixpng "/path/to/png/folder"
O script:
#!/bin/bash
FILES=$(find "$1"-type f -iname '*.png')
FIXED=0for 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"
Isso merece mais votos. Todas as outras soluções tocam em todos os arquivos, o que é especialmente ruim se você tiver muitas imagens em um sistema de controle de versão. Obrigado pelo script!
Kfunk
Eu tenho, pngcrush 1.7.85, uses libpng 1.6.21 and zlib 1.2.8mas meu pngcrush não tem -warnnem -reducesinalizadores, então esta solução não funciona.
pbhj
4
algumas informações básicas sobre isso:
Algumas alterações na libpng versão 1.6 ou superior fazem com que ele emita um aviso ou até não funcione corretamente com o perfil sRGB HP / MS original, levando ao seguinte stderr: aviso libpng: iCCP: perfil sRGB incorreto conhecido O perfil antigo usa um ponto branco D50, onde D65 é padrão. Esse perfil não é incomum, sendo usado pelo Adobe Photoshop, embora não tenha sido incorporado às imagens por padrão.
A detecção de erros em alguns pedaços foi aprimorada; em particular, o leitor de partes do iCCP agora faz uma validação bastante completa do formato básico. Alguns perfis incorretos que foram aceitos anteriormente agora são rejeitados, em particular o perfil sRGB da Microsoft / HP quebrado muito antigo. O requisito de especificação PNG de que apenas perfis em escala de cinza possam aparecer em imagens com o tipo de cor 0 ou 4 e que, mesmo que a imagem contenha apenas pixels em cinza, apenas perfis RGB possam aparecer em imagens com o tipo de cor 2, 3 ou 6, agora são aplicados. O bloco sRGB pode aparecer em imagens com qualquer tipo de cor.
Estendendo a solução friederbluemle, faça o download do pngcrush e use o código como este se estiver sendo executado em vários arquivos png
path =r"C:\\project\\project\\images"# path to all .png imagesimport 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)
aqui todos os arquivos png relacionados a projetos estão em uma pasta.
Eu executei esses dois comandos na raiz do projeto e foi corrigido.
Redirecione basicamente a saída do comando "find" para um arquivo de texto para usar como sua lista de arquivos a serem processados. Então você pode ler esse arquivo de texto em "mogrify" usando o sinalizador "@":
find * .png -mtime -1> list.txt
mogrify -resize 50% @ list.txt
Isso usaria "find" para obter todas as imagens * .png com mais de 1 dia e imprimi-las em um arquivo chamado "list.txt". Em seguida, "mogrify" lê essa lista, processa as imagens e substitui os originais pelas versões redimensionadas. Pode haver pequenas diferenças no comportamento de "localizar" de um sistema para outro, portanto, você deverá verificar a página de manual quanto ao uso exato.
Respostas:
A Libpng-1.6 é mais rigorosa quanto à verificação de perfis ICC do que nas versões anteriores. Você pode ignorar o aviso. Para se livrar dele, remova o pedaço do iCCP da imagem PNG.
Alguns aplicativos tratam avisos como erros; se você estiver usando esse aplicativo, precisará remover o pedaço. Você pode fazer isso com vários editores PNG, como o ImageMagick's
Para remover o bloco inválido do iCCP de todos os arquivos PNG em uma pasta (diretório), você pode usar o
mogrify
ImageMagick:Isso requer que seu ImageMagick tenha sido construído com libpng16. Você pode verificá-lo facilmente executando:
Se você deseja descobrir quais arquivos precisam ser corrigidos, em vez de processá-los às cegas, é possível executar
onde os
-n
meios não reescrevem os arquivos e-q
suprimem a maior parte da saída, exceto os avisos. Desculpe, ainda não há opção no pngcrush para suprimir tudo, exceto os avisos.As versões binárias do ImageMagick estão aqui
Para projetos do Android (Android Studio), navegue até a
res
pasta.Por exemplo:
fonte
mogrify **/*.png
parece modificar todos os arquivos na árvore. Eu preferiria atualizar apenas a imagem com defeito.find . -type f -name '*.png' -execute mogrify \{\} \;
para modificar recursivamente os.png
arquivos no diretório atual.-ow
para substituir e corrigir o arquivo, além de reduzir o tamanho em cerca de 1/6! Só precisava obter o código fonte do programa para o meu mac, compilar, instalar manualmente e executá-lo. O GitHub Kjuly / pngcrush pode ter um binário pré-compilado, mas não tenho certeza. O Sourceforge parecia ter apenas o Windows exe disponível e o código-fonte. A resposta de friederbluemle parece fazer isso e muito mais.Use
pngcrush
para remover o perfil sRGB incorreto do arquivo png:-ow
substituirá o arquivo de entrada-rem allb
removerá todos os pedaços auxiliares, exceto tRNS e gAMA-reduce
reduz o tipo de cor sem perdas ou a profundidade de bitsNa saída do console, você deve ver
Removed the sRGB chunk
e possivelmente mais mensagens sobre remoções de fragmentos. Você terminará com um arquivo PNG menor e otimizado. Como o comando substituirá o arquivo original, crie um backup ou use o controle de versão.fonte
find . -type f -iname '*.png' -exec pngcrush -ow -rem allb -reduce {} \;
(Testado em GNU / Linux)Solução
O perfil incorreto pode ser corrigido por:
Nota: Esta solução usa a biblioteca Qt .
Exemplo
Aqui está um exemplo mínimo que eu escrevi em C ++ para demonstrar como implementar a solução proposta:
O código fonte completo de um aplicativo GUI baseado neste exemplo está disponível no GitHub .
ATUALIZAÇÃO DE 05.12.2019: A resposta foi e ainda é válida, no entanto, houve um erro no aplicativo GUI que compartilhei no GitHub, fazendo com que a imagem de saída fique vazia. Acabei de corrigir e peço desculpas pelo inconveniente!
fonte
Você também pode consertar isso no photoshop ...
fonte
Para adicionar a ótima resposta de Glenn, aqui está o que eu fiz para descobrir quais arquivos estavam com defeito:
Eu usei o find e xargs porque o pngcrush não conseguiu lidar com muitos argumentos (retornados por
**/*.png
). O-print0
e-0
é necessário para manipular nomes de arquivos contendo espaços.Em seguida, procure na saída para estas linhas:
iCCP: Not recognizing known sRGB profile that has been edited
.E para cada um deles, execute o mogrify nele para corrigi-los.
Isso evita que uma confirmação altere todos os arquivos png no repositório quando apenas alguns foram realmente modificados. Além disso, tem a vantagem de mostrar exatamente quais arquivos estão com defeito.
Testei isso no Windows com um console Cygwin e um shell zsh. Mais uma vez obrigado a Glenn, que colocou a maioria dos itens acima, estou apenas adicionando uma resposta, pois geralmente é mais fácil encontrar do que comentários :)
fonte
find . -name "*.png" -exec sh -c 'echo Testing {} && pngcrush -n -q {}' \;
Todo PNG incorreto irá gerar #pngcrush: iCCP: known incorrect sRGB profile
Graças à resposta fantástica de Glenn , usei a funcionalidade "mogrify * .png" do ImageMagik . No entanto, eu tinha imagens enterradas em subpastas, então usei esse script Python simples para aplicar isso a todas as imagens em todas as subpastas e pensei que isso poderia ajudar outras pessoas:
fonte
mogrify **/*.png
.Existe uma maneira mais fácil de corrigir esse problema com o Mac OS e o Homebrew:
Instale o homebrew se ainda não estiver instalado
ou para fazê-lo com todos os arquivos no diretório atual:
Ele criará uma cópia fixa para cada arquivo png no diretório atual e a colocará no subdiretório tmp. Depois disso, se tudo estiver OK, você precisará substituir os arquivos originais.
Outra dica é usar os aplicativos Keynote e Preview para criar os ícones. Eu os desenho usando o Keynote, no tamanho de cerca de 120x120 pixels, sobre um slide com fundo branco (a opção de tornar os polígonos editáveis é ótima!). Antes de exportar para a Visualização, desenhei um retângulo ao redor do ícone (sem preenchimento ou sombra, apenas o contorno, com o tamanho de 135x135) e copio tudo para a área de transferência. Depois disso, você só precisa abri-lo com a ferramenta Visualizar usando "Novo da área de transferência", selecione uma área de 128x128 pixels ao redor do ícone, copie, use "Novo da área de transferência" novamente e exporte-o para PNG. Você não precisará executar a ferramenta pngfix.
fonte
Depois de tentar algumas sugestões nesta página, acabei usando a solução pngcrush. Você pode usar o script bash abaixo para detectar e corrigir recursivamente perfis png incorretos. Basta passar o caminho completo para o diretório que você deseja procurar por arquivos png.
O script:
fonte
pngcrush 1.7.85, uses libpng 1.6.21 and zlib 1.2.8
mas meu pngcrush não tem-warn
nem-reduce
sinalizadores, então esta solução não funciona.algumas informações básicas sobre isso:
(fonte: https://wiki.archlinux.org/index.php/Libpng_errors )
(fonte: https://forum.qt.io/topic/58638/solved-libpng-warning-iccp-known-incorrect-srgb-profile-drive-me-nuts/16 )
fonte
Usando o visualizador de imagens IrfanView no Windows, simplesmente salvei novamente a imagem PNG e isso corrigiu o problema.
fonte
Estendendo a solução friederbluemle, faça o download do pngcrush e use o código como este se estiver sendo executado em vários arquivos png
aqui todos os arquivos png relacionados a projetos estão em uma pasta.
fonte
Eu executei esses dois comandos na raiz do projeto e foi corrigido.
Redirecione basicamente a saída do comando "find" para um arquivo de texto para usar como sua lista de arquivos a serem processados. Então você pode ler esse arquivo de texto em "mogrify" usando o sinalizador "@":
Isso usaria "find" para obter todas as imagens * .png com mais de 1 dia e imprimi-las em um arquivo chamado "list.txt". Em seguida, "mogrify" lê essa lista, processa as imagens e substitui os originais pelas versões redimensionadas. Pode haver pequenas diferenças no comportamento de "localizar" de um sistema para outro, portanto, você deverá verificar a página de manual quanto ao uso exato.
fonte
Aqui está uma resposta de força ridiculamente bruta:
Eu modifiquei o script gradlew. Aqui está meu novo comando exec no final do arquivo no diretório
fonte