[Aide] Découpe automatique d'une image

Salut à tous,

Voilà, pour le dev d’un jeu, je vais avoir régulièrement besoin de séparer une image de 96128 et multiples images de 3232.
Les forts en maths auront compris que ca fait (332)(4*32).

Le truc, c’est que le faire une fois à la main c’est déjà chiant, je n’imagine même pas le faire à la chaîne sans mettre en place un automatisme.
Si vous aviez dans votre besace une idée, un script, un petit soft gratos pour faire ça, je vous en serais très reconnaissants.

A noter que je bosse sous linux, avec Gimp, mais que je suis preneur de toute autre solution, y compris du windows, tant qu’on reste dans la légalité comme de bien entendu.
Merci d’avance :smiley:

et tu ne peux pas le faire en live ? j’avais eu le meme probleme il y a quelque temps, sur une demo pour me faire la main avec la libnds ( trouvé ), et au final c’etait nettement plus efficace niveau workflow de balancer les images completes dans mon executable, et de les split au chargement

parceque a partir du moment ou tu sais lire un pixel donné, et faire une texture en memoire, ton histoire avec quelques for c’est réglé super rapidement en C/C++

séparer une image, perso, je ferais ça viteuf en perl ou en PHP avec GD
Genre avec http://www.php.net/manual/fr/function.imagecopy.php

Sinon, si tu touches en Python, l’API PIL est excellente.

Python Imaging Library (PIL)

En 2/2, ton script c’est:

[code]from PIL import Image

xsize = 32
ysize = 32
filename = ‘toto.png’

img = Image.open(filename)
for x in range(img.size[0]/xsize):
for y in range(img.size[1]/ysize):
imgpiece = Image.crop((xxsize, yysize, (x+1)*xsize, (y+1)*ysize))
imgpiece.save(filename[:-4] + ‘’ + str(x) + '’ + str(y) + filename[-4:]) #sauve sous le nom toto_0_0.png, toto_0_1.png, etc.[/code]

Bon, ca va crasher si ton image n’est pas divisible, i.e. x%xsize > 0 ou y%ysize > 0, mais c’est pas la mer a boire de rajouter un bout de script qui te la retaille.

1 « J'aime »

[quote=« Kzi, post:2, topic: 50117 »]et tu ne peux pas le faire en live ? j’avais eu le meme probleme il y a quelque temps, sur une demo pour me faire la main avec la libnds ( trouvé ), et au final c’etait nettement plus efficace niveau workflow de balancer les images completes dans mon executable, et de les split au chargement
parceque a partir du moment ou tu sais lire un pixel donné, et faire une texture en memoire, ton histoire avec quelques for c’est réglé super rapidement en C/C++[/quote]J’y ai bien sur pensé, mais la plate-forme visée est Android et d’experience je sais que la manipulation d’image est une assez mauvaise idée, vue la petite taille de la VM ( 16Mo ). Si je peux en plus éviter cette création à chaque execution du jeu, qui peux être couteuse en temps, ça sera ça de gagner.
L’idée est bonne, mais pas applicable avec les vilaines contraintes d’une plateforme mobile.

[quote=« Coldorak, post:3, topic: 50117 »]séparer une image, perso, je ferais ça viteuf en perl ou en PHP avec GD
Genre avec http://www.php.net/manual/fr/function.imagecopy.php[/quote]Ouais, sauf que je suis pas dev Perl ou Php et que j’envisage nettement plus un truc beubeuh pour gros nullos qu’un truc de l33t haxxorz qui necessite d’installer un serveur web + moteur php + truc perl ( ça commence à faire un peu beaucoup). Si tu as une maniere simple de mettre ça en place, je suis preneur.

[quote=« LodeRunner, post:4, topic: 50117 »]Sinon, si tu touches en Python, l’API PIL est excellente.
Python Imaging Library (PIL)
…[/quote]Je touche pas trop en python et en plus à chaque fois ça me fait repenser à la photo de Bussiere et son bouquin :smiley:

On doit pouvoir faire ça avec un script photoshop, mais sinon, j’avais utilisé Irfanview pour faire du traitement simple d’images en batch.

[quote=« kaneloon, post:6, topic: 50117 »]On doit pouvoir faire ça avec un script photoshop, mais sinon, j’avais utilisé Irfanview pour faire du traitement simple d’images en batch.[/quote]Photoshop = pas possible.
Sinon Irfanview ou Xnview, même combat, pas de traitement de ce type existant :smiley:

On m’a soufflé ImageMagick qui permet de faire pas mal de truc en ligne de commande : http://www.imagemagick.org/Usage/
Je me rabas là-dessus en attendant.

J’ai codé une appli en ligne de commande en 2 minutes :

http://styx31.free.fr/PicSplit.zip

Tu lui donnes le nom du fichier en premier paramètre, largeur et hauteur des morceaux souhaités ensuite, et il te génère des fichiers au format png.

Exemple : PicSplit source.png 32 64 ou PicSplit source.png 32.

Y’a le source avec, l’exe est compilé sur .net 2.0

Edit : ça supporte les dimensions non multiples de la largeur demandée.

1 « J'aime »

[quote=« Styx31, post:8, topic: 50117 »]J’ai codé une appli en ligne de commande en 2 minutes :

http://styx31.free.fr/PicSplit.zip

Tu lui donnes le nom du fichier en premier paramètre, largeur et hauteur des morceaux souhaités ensuite, et il te génère des fichiers au format png.

Exemple : PicSplit source.png 32 64 ou PicSplit source.png 32.

Y’a le source avec, l’exe est compilé sur .net 2.0

Edit : ça supporte les dimensions non multiples de la largeur demandée.[/quote]
Roh comment il déchire le Styx…
Merci :smiley: mais fallait pas, je cherchais un truc tout fait ( sinon j’aurai aussi codé mon truc en java ).

Bref, ça le fait bien :smiley:

J’arrive après la bataille, mais imagemagick doit faire ça très bien :

$man convert ... -extract geometry extract area from image ...

[edit]
Tous les détails à cette page.

Vu le nombre de lignes pour le coder, je me suis dit que tu devais avoir une bonne raison de pas le faire… :smiley:

M’enfin, ça m’aura occupé pour ma pause café…

Je me suis donc rabattu là-dessus ( avant que Styx dégaine son coffee powered .net )

Je l’ajoute ici pour la postérité.

recup des packages imagemagick
ligne de commande : convert image.png -crop 32x32 +repage image_%03d.png

Félicitations à la zone qui a comme d’hab réussi à fournir 157 moyens d’arriver au même résultat :smiley:

Bonjour/Bonsoir
Je sais que ce topic ayant été crée il y a 9 ans ( ouaw :grinning: ) , mais @Styx31
tu peux svp reuplowder cette appli que t’as codé . car j’en est besoin , le lien ne marche plus .
Un grand merci d’avance
Pyco

Euh tout est parti à la benne depuis longtemps. Je te conseille de faire comme @Monsieur_Max à l’époque : utiliser imagemagick qui fait ça nativement à priori.

1 « J'aime »

Marrant cette résurrection de thread :slight_smile:

Je ferai ça en trois lignes de code maintenant :wink:

Mais sinon, pour les non-dev: imagemagick, hop torché

S’il vous plai tu peux me faire un petit logiciel pour faire ça , :sweat:

regarde par la : http://www.imagemagick.org/Usage/crop/

Je ne vais pas me prononcer à la place de Monsieur @Monsieur_Max (je suis obligé par contrat :), cf un autre thread … ) mais je pense qu’il serait préférable que tu décrives ce que tu veux faire (si c’est possible). Les geekzoniens qui trainent ici ont en effet la sale manie de trouver des solutions meilleures que celle à laquelle on pensait au départ.
(Même si parfois en chemin on s’égare sur des solutions qui nécessitent de changer l’ordi, l’OS, l’utilisateur et son animal de companie)
En plus, ça montre qu’on a soi même fait un effort avant d’en demander un aux autres :slight_smile: (et accessoirement, ça éviterait qu’il fasse l’outil, et que ça ne fasse pas ce que tu veux)

1 « J'aime »

Genre j’ai que ça à foutre…
Tu installes imagemagick, tu fais une ligne de commande et c’est reglé…

2 « J'aime »