Crie um programa ou função que tome o nome do arquivo como argumento ou o leia da entrada padrão e conclua a seguinte tarefa:
- Leia a imagem de um arquivo png (nome dado como argumento).
- Inverta as cores nessa imagem, de modo que, por exemplo, o verde escuro (0, 75, 30) se torne (255, 180, 225) (porque 255-0 = 255, 255-75 = 180 e 255-30 = 225). Você não deve alterar o valor do canal alfa.
- Envie essa imagem para um arquivo chamado
a.png
(em formato png) ou mostre-a na janela da GUI.
Isso é código-golfe . Aplicam-se brechas padrão.
code-golf
graphical-output
image-processing
Hannes Karppila
fonte
fonte
Respostas:
ImageMagick
display -fx
, 371824bytesA ferramenta ImageMagick
display
com ofx
parâmetro pode aplicar o programa acima a um png fornecido como parâmetro e exibir os resultados na tela.Confira meu post na meta sobre o ImageMagick como uma linguagem de programação. Eu escrevi um testador principal por lá como prova de conceito.
A contagem de bytes
display -fx code filename
é equivalente aperl -e code filename
, onde tradicionalmente contamos apenascode
para o comprimento.fonte
Pitão,
161513 bytesSaídas para
a.png
.Obrigado a Jakube por 2 bytes!
fonte
~
ou similar)?.w-LLL255'z\a
. Mas não me pergunte como isso funciona ou por que você precisaLLL
e não algo parecidoLMM
.MATL , 10 bytes
Existem cinco subformatos diferentes de PNG, dependendo de como a cor é codificada. Nenhum deles parece ser mais "opcional" que os outros. Eu escolhi o mais flexível
Truecolor
, no qual cada pixel pode ter uma cor arbitrária. O código acima também suportaTruecolor with alpha
, ignorando o canal alfa.Para conhecer o subformato de cor de um arquivo PNG: procure a sequência de bytes
[73 72 68 82]
perto do início do arquivo; e o décimo byte a partir daí terá um dos cinco valores na tabela vinculada acima .Como o código funciona
Bem direto:
Exemplo
Não pude resistir a me ver invertido, então baixei esta imagem (que está em subformato
Truecolor with alpha
), corri o código (a segunda linha é a entrada do usuário)e pegou
fonte
Java, 295
fonte
java.io.File
?import java.io.*;
, ele não salva bytes, mas na verdade aumenta o tamanho.R, 124 bytes
Lê no nome do arquivo através de stdin (
readline()
).Exemplo de entrada / saída usando o primeiro png que encontrei neste computador :)
fonte
CSS, 19 bytes
http://output.jsbin.com/suqayudoyu
fonte
Tcl, 176 bytes
Carrega o PNG pelo
photo
tipo de imagem, obtém os dados da imagem, convertendo cada linha e cor, subtraindo de #FFFFFF, depois grava o arquivo de volta no disco (como "a.png").Para obter melhores resultados, use PNGs TrueColor, pois o Tk tentará usar a mesma resolução de cores que os dados da imagem de origem.
Para ver a imagem sem problemas de amostragem, adicione
até o fim. (Obviamente, isso é mais longo que a opção de economia de disco.)
fonte
foreach
porlmap
Mathematica, 140 bytes
fonte
Import[#]
paraImport@#
e o mesmo paraColorCombine[Most@#]
.ColorNegate@*Import
seria uma resposta completa?cmd + IrfanView, 19 caracteres
Apenas a alternativa cara de Sparr 's resposta .
fonte
Julia,
9479 bytesEste é um programa completo que usa um nome de arquivo como argumento de linha de comando e sobrescreve o arquivo fornecido com a imagem invertida. Requer que o pacote
FileIO
eImage
esteja instalado. O último não precisa ser importado.Chame o programa na linha de comando como
julia filename.jl /path/to/image.png
.Ungolfed:
Exemplo:
fonte
Python + PIL, 85 bytes
Isso define uma função anônima que pega um nome de arquivo como uma sequência e salva a imagem resultante em
a.png
.Execução de teste:
fonte
from PIL import Image as I
seguido pela substituiçãoImage
na função porI
import Image
vai funcionar, raspar toda uma carga de bytesfrom PIL.Image import*
eval
função funciona contra todas as "bandas", incluindo a alfa. Aqui está o que eu recebo ao inverter o logotipo do Firefox - imgur.com/a/wV3MSQXC + stb_image + stb_image_write,
175162 bytes (ou + 72 =247234)Minha primeira submissão neste site.
Provavelmente poderia economizar alguns bytes. Precisa de
stb_*
implementação para estar em uma biblioteca separada ou no início deste arquivo com:Eu não o incluí na contagem porque é essencialmente parte da biblioteca (especialmente se for compilado separadamente). +72 bytes para adicionar isso, se necessário, no entanto.
Atualização 1:
Percebeu que apenas uma função (em oposição a um programa inteiro) é aceitável, eliminando 15 bytes. A implementação antiga (que é um programa inteiro), para referência:
fonte
Java,
300298 bytesfonte
MATLAB / oitava, 31 bytes
Código:
Exemplo:
Explicação:
Leia a imagem, a
x
partir de um arquivo gráfico, complemente a imagem e exiba a imagem.fonte
x
é predefinido, o que não é permitido. Você pode transformá-lo em uma função lambda para +4 bytes com@(x)
.FFmpeg, 10 bytes
Edit: Tomando uma sugestão da resposta de @ Sparr
(o texto acima, quando transmitido para ffplay junto com o nome da imagem, exibirá a imagem negada)
O acima é salvo como um arquivo em lotes.
fonte
Raquete 282 bytes
Forma mais legível:
Uso:
fonte
Golang, 311 bytes
destroçado
fonte
Python 2 + OpenCV , 55 bytes
A biblioteca OpenCV usa matrizes NumPy para ler, processar e gravar imagens. Abaixo está um exemplo deste script invertendo uma imagem encontrada no mozilla.org .
Todos os canais, incluindo o canal alfa, serão invertidos. Isso é problemático para imagens com transparência. Mas, como o @Mego apontou, o suporte ao canal alfa é opcional.
Abaixo está uma versão comentada de 82 bytes que a propriedade lida com o canal alfa.
Como mostrado abaixo, isso manipula adequadamente a inversão do logotipo do Firefox, preservando o fundo transparente.
fonte