Créez un programme ou une fonction qui prend le nom de fichier comme argument ou le lit à partir de l'entrée standard et termine la tâche suivante:
- Lire l'image à partir d'un fichier png (nom donné en argument).
- Inversez les couleurs dans cette image, de sorte que par exemple le vert foncé (0, 75, 30) deviendrait (255, 180, 225) (car 255-0 = 255, 255-75 = 180 et 255-30 = 225). Vous ne devez pas modifier la valeur du canal alpha.
- Exportez cette image dans un fichier appelé
a.png
(au format png) ou affichez-la dans la fenêtre GUI.
C'est du code-golf . Des échappatoires standard s'appliquent.
code-golf
graphical-output
image-processing
Hannes Karppila
la source
la source
Réponses:
ImageMagick
display -fx
, 371824octetsL'outil ImageMagick
display
avec lefx
paramètre peut appliquer le programme ci-dessus à un png donné comme paramètre et afficher les résultats à l'écran.Consultez mon post sur meta sur ImageMagick en tant que langage de programmation. J'ai écrit un testeur principal là-bas comme preuve de concept.
Le comptage des octets
display -fx code filename
est équivalent àperl -e code filename
, où nous comptons traditionnellement justecode
pour la longueur.la source
Pyth,
161513 octetsSorties vers
a.png
.Merci à Jakube pour 2 octets!
la source
~
ou similaire)?.w-LLL255'z\a
. Mais ne me demandez pas comment cela fonctionne ou pourquoi vous avez besoinLLL
et pas quelque chose comme çaLMM
.MATL , 10 octets
Il existe cinq sous - formats différents de PNG, selon la façon dont la couleur est codée. Aucun d'eux ne semble plus "facultatif" que les autres. J'ai choisi le plus flexible
Truecolor
, dans lequel chaque pixel peut avoir une couleur arbitraire. Le code ci-dessus prend également en chargeTruecolor with alpha
, en ignorant le canal alpha.Pour connaître le sous-format de couleur d'un fichier PNG: recherchez la séquence d'octets
[73 72 68 82]
près du début du fichier; et le dixième octet à partir de là aura l'une des cinq valeurs du tableau lié ci-dessus .Comment fonctionne le code
Assez simple:
Exemple
Je n'ai pas pu résister à me voir inversé, j'ai donc téléchargé cette image (qui est en sous-format
Truecolor with alpha
), j'ai exécuté le code (la deuxième ligne est entrée par l'utilisateur)et j'ai
la source
Java, 295
la source
java.io.File
?import java.io.*;
, il n'enregistre aucun octet mais augmente en fait la taille.R, 124 octets
Lit le nom du fichier via stdin (
readline()
).Exemple d'entrée / sortie utilisant le premier png que j'ai trouvé sur cet ordinateur :)
la source
CSS, 19 octets
http://output.jsbin.com/suqayudoyu
la source
Tcl, 176 octets
Charge le PNG via le
photo
type d'image, obtient les données d'image, convertit chaque ligne et couleur en soustrayant de #FFFFFF, puis réécrit le fichier sur le disque (sous la forme "a.png").Pour de meilleurs résultats, utilisez des PNG TrueColor, car Tk essaiera d'utiliser la même résolution de couleur que les données d'image source.
Pour voir l'image sans problèmes d'échantillonnage, ajoutez
jusqu'à la fin. (Évidemment, c'est plus long que l'option de sauvegarde sur disque.)
la source
foreach
parlmap
Mathematica, 140 octets
la source
Import[#]
pourImport@#
et même pourColorCombine[Most@#]
.ColorNegate@*Import
réponse complète?cmd + IrfanView, 19 caractères
Juste l'alternative coûteuse de la réponse de Sparr .
la source
Julia,
9479 octetsIl s'agit d'un programme complet qui prend un nom de fichier comme argument de ligne de commande et écrase le fichier donné avec l'image inversée. Il nécessite que le package
FileIO
etImage
soient installés. Ce dernier n'a cependant pas besoin d'être importé.Appelez le programme à partir de la ligne de commande comme
julia filename.jl /path/to/image.png
.Non golfé:
Exemple:
la source
Python + PIL, 85 octets
Cela définit une fonction anonyme qui prend un nom de fichier sous forme de chaîne et enregistre l'image résultante dans
a.png
.Essai:
la source
from PIL import Image as I
Image
I
import Image
, en rasant une charge entière d'octetsfrom PIL.Image import*
eval
fonction fonctionne contre toutes les "bandes", y compris l'alpha. Voici ce que j'obtiens en inversant le logo Firefox - imgur.com/a/wV3MSQXC + stb_image + stb_image_write,
175162 octets (ou + 72 =247234)Ma première soumission sur ce site.
Pourrait probablement raser quelques octets. Nécessite la
stb_*
mise en œuvre soit dans une bibliothèque distincte, soit au début de ce fichier avec:Je ne l'ai pas inclus dans le décompte car il fait essentiellement partie de la bibliothèque (surtout s'il est compilé séparément). +72 octets pour ajouter cela si nécessaire, cependant.
Mise à jour 1:
Réalisé que seule une fonction (par opposition à un programme entier) est acceptable, rasant 15 octets. L' ancienne implémentation (qui est un programme entier), pour référence:
la source
Java,
300298 octetsla source
MATLAB / Octave, 31 octets
Code:
Exemple:
Explication:
Lisez l'image, à
x
partir d'un fichier graphique, complétez l'image, puis affichez l'image.la source
x
c'est prédéfini, ce qui n'est pas autorisé. Vous pouvez le transformer en une fonction lambda pour +4 octets avec@(x)
.FFmpeg, 10 octets
Edit: S'inspirant de la réponse de @ Sparr
(ce qui précède lorsqu'il est passé à ffplay avec le nom de l'image, affichera l'image annulée)
Ce qui précède est enregistré en tant que fichier de commandes.
la source
Raquette 282 octets
Forme plus lisible:
Usage:
la source
Golang, 311 octets
non golfé
la source
Python 2 + OpenCV , 55 octets
La bibliothèque OpenCV utilise des tableaux NumPy pour lire, traiter et écrire des images. Voici un exemple de ce script inversant une image trouvée sur mozilla.org .
Tous les canaux, y compris le canal alpha, seront inversés. Cela pose problème pour les images transparentes. Mais comme @Mego l'a souligné, la prise en charge du canal alpha est facultative.
Voici une version commentée de 82 octets dont la propriété gère le canal alpha.
Comme indiqué ci-dessous, cela gère correctement l'inversion du logo Firefox tout en préservant l'arrière-plan transparent.
la source