Existe-t-il un programme en ligne de commande qui peut convertir une image en une image artistique ASCII?


19

Existe-t-il un programme en ligne de commande (pour Linux) qui peut convertir une image en art ascii puis enregistrer cette sortie sous forme d'image, par exemple jpg ou png?

Pour illustrer ce dont j'ai besoin, je veux convertir l'image ci-dessous en art ascii entrez la description de l'image ici

La sortie que je désire d'un programme devrait être similaire à celle-ci, qui a été créée en prenant une capture d'écran de la sortie d'un convertisseur image-ascii (la sortie était du texte pur)

entrez la description de l'image ici

Je suis conscient que GIMP a la possibilité d'enregistrer une image en tant qu'art ascii et aview peut également convertir une image en ascii. Cependant, le premier ne peut pas être fait via la ligne de commande et le second vous permet uniquement de visualiser la sortie, pas de l'enregistrer (je ne veux pas recourir à une capture d'écran de la sortie).

Je suis également conscient que libcaca peut enregistrer sa sortie dans une image, mais il ne produit que des ascii colorés, comme ci-dessous.

entrez la description de l'image ici

Réalisé en convertissant l'image source en niveaux de gris puis avec la commande suivante:

img2txt -W 70 -f tga input.jpg > output.tga

La raison de vouloir un programme en ligne de commande est de traiter par lots un dossier plein d'images.


1
Je ne l'ai jamais essayé, mais je sais qu'il est possible de diriger du texte vers convert(ImageMagick). Si vous définissez la sortie -f d'img2txt sur ansi (plutôt que sur ansi coloré), vous pouvez diriger le résultat à convertir (ou un autre logiciel approprié)
horatio

@horatio: convert semble attendre une entrée de fichier et refuse de lire depuis un pipe. Nous pouvons quand même le faire via un fichier temporaire.
Takkat

Réponses:


7

Vous pouvez utiliser ce code python que j'ai créé pour créer de l'art ascii à partir d'images fixes et de vidéos:

https://gist.github.com/lindylex/9374326

Exemple de sortie

Original entrez la description de l'image ici

Sortie d'art ASCII ( python ascii_movie_image_ver_1.py cat.jpg 4 10) entrez la description de l'image ici


2
les liens vont et viennent, même si c'est votre propre site ... pourriez-vous s'il vous plaît ajouter deux captures d'écran de "avant" et "après" en utilisant votre code?
Ilan

4
@Ilan J'ai ajouté un exemple et indiqué un référentiel git public
hellocatfood

14

Si vous semblez utiliser Linux, vous pouvez assembler facilement les applications pour obtenir le résultat souhaité. Cela peut ensuite également être incorporé dans votre script de traitement par lots.

L'exemple ci-dessous utilise jp2a , un puissant convertisseur JPG vers ASCII-art avec de nombreuses options pour obtenir les résultats souhaités (consultez la page de manuel). Nous traitons ensuite le fichier texte ASCII résultant en une image à l'aide de la conversion à partir de la suite ImageMagick . Encore une fois, il existe de nombreuses options pour affiner le résultat. Les deux applications sont susceptibles d'être disponibles à partir des référentiels de votre distribution.

Un exemple de script ci-dessous produira une image d'art ASCII (le format en fonction de l'extension que nous donnons, .jpgest pour JPEG) à partir d'une image JPEG d'entrée. La source est rendue à une largeur de 160 caractères à 6 pt. Cela s'adaptera alors simplement à la taille de page par défaut telle que prédéfinie à partir de la conversion.

#! /bin/bash
#Usage ./j2asc infile.jpg outfile.jpg

echo "converting $1 to $2"
jp2a --width=160 -i  $1 --output=tmp.txt
convert -font Courier -pointsize 6 tmp.txt $2

C'est probablement le plus proche que j'obtiendrai à ma sortie souhaitée. Merci!
hellocatfood

Existe-t-il un moyen de spécifier la largeur pour être autre chose alors 835px? Je veux convertir l'art ascii en une 1920x1080image de fond d'écran mais quand je passe l' -resize 1920x1080option, la largeur reste 835px.

@awashburn: la taille de l'image est déterminée par le nombre de caractères (largeur) et la taille des points. Agrandir la taille des points pour une sortie plus grande ou mettre à l'échelle l'image résultante dans un deuxième passage.
Takkat

1
Pour les utilisateurs de MacOS: jp2a est également disponible via homebrew et en cours d' exécution: brew install jp2a.
k0pernikus

1
Voir également une sortie directe au format html dans certains cas: jp2a --html --width=160 --chars="\'\"love" input.jpg --output=output.htm. Vous pouvez spécifier votre jeu de caractères préféré pour le rendu (vous devrez échapper les métacaractères si vous voulez les utiliser). Pour jp2a, voir aussi AUR pour Arch .

2

Dans Node.js Knockout 2012, il y avait une soumission gagnante qui prenait un flux vidéo webcam et crachait un "flux ascii":

Asciigram

Page Asciigram

Asciigram est un "outil de productivité" qui vous permet de créer des vidéos et des images ASCII à l'aide de votre webcam. Vous pouvez également créer des images ASCII en faisant glisser des images sur la page. [Lien]

Ce n'est pas exactement la ligne de commande, mais vous pouvez peut-être l'adapter à vos besoins. La bibliothèque qu'ils utilisent pour convertir l'image en ascii s'appelle Jscii .


1
Il ne produit que du texte et non des images. De plus, ce n'est pas un programme en ligne de commande
hellocatfood


1

Vous semblez utiliser Linux et connaissez déjà libcaca. Il y a une autre lib qui fait exactement ce que vous dites (Image à Ascii en ligne de commande): Aalib .

Il existe de nombreux programmes pour ce faire. Celui-ci fonctionne à la fois sur Linux et Windows . N'utilise pas de bibliothèques externes, le code source complet disponible, etc ...


Pour autant que je sache, Aalib ne peut pas enregistrer sa sortie directement dans une image - une méthode impliquant des captures d'écran devrait être utilisée, ce qui ne serait pas fiable pour les grandes images. S'il existe un moyen de le faire en utilisant Aalib, pourriez-vous mettre à jour votre réponse? Le programme que vous avez mentionné semble vraiment bon. Existe-t-il une conversion par lots et existe-t-il une interface de ligne de commande pour cela?
hellocatfood

1

Tant que je suis conscient que le programme n'a pas d'interface de ligne de commande, mais convertit les images en texte, puis en images. La source est disponible, vous pouvez donc l'utiliser pour écrire votre propre outil.

Vous avez raison, aalib ne produit pas d'images, mais produit du texte. Ainsi que de nombreux autres programmes qui fonctionnent en ligne de commande.

Si vous utilisez Linux, il existe un programme en ligne de commande appelé asciitopgm qui convertira le texte ascii en bitmap. Cela fait partie du package netpbm.

Vous pouvez donc utiliser une combinaison d'outils:

  1. aalib pour dessiner une image en utilisant du texte
  2. asciitopgm pour créer un bitmap pgm avec le fichier texte.
  3. (facultatif) Utilisez convert (à partir du package Imagemagick) pour convertir le pgm en tout autre format raster souhaité.

Je pense que vous pouvez faire ce que vous vouliez de cette façon.


0

Oui, il existe un outil appelé jp2aqui convertit essentiellement une image jpg en art ascii.

Par exemple:

$ jp2a skull.jpg

Original Skull.jpg

entrez la description de l'image ici

Sortie Ascii Art

entrez la description de l'image ici

Assurez-vous d'utiliser l'image jpg. Si votre image est dans un autre format, vous pouvez la modifier en

$ convert skull.png skull.jpg

1
Bonjour et bienvenue à GDSE! Cela ressemble à une réponse en double. Vous pouvez l'améliorer en le modifiant ou il peut éventuellement être supprimé.
curieux
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.