Comment séparer des images PNG concaténé ?

Fermé
hubertlejaune - 25 août 2010 à 00:48
hubertlejaune Messages postés 1 Date d'inscription jeudi 26 août 2010 Statut Membre Dernière intervention 29 août 2010 - 29 août 2010 à 00:28
Bonjour,
J'ai un fichier contenant plusieurs images au format PNG mise bout à bout, à l'aide d'un éditeur hexadécimal j'ai réussi à en extraire une, le début et la fin d'une image PNG étant toujours identique, mais le fichier est loin de contenir qu'une dizaine d'image.
Une idée pour automatiser la démarche ?
Merci d'avance

A voir également:

7 réponses

sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
25 août 2010 à 22:31
Bonsoir,

Excuses pour la réponse tardive. Tu peux télécharger ici un tit fichier java http://dl.free.fr/getfile.pl?file=/qPMUnwbL

Tout (ou presque) est en dur dans le code, pas eu le temps de faire plus joli. Utilisation: tu mets le fichier quelque part sur ton disque et tu ouvres une fenêtre DOS. Tu navigues vers le dossier en cause (le dossier contenant le fichier téléchargé) et tu tapes

java -jar pngSplitter.jar argument

où argument est le nom de ton fichier contenant les images concaténées. Exemple (on suppose que le fichier pngSplitter.jar est à la racine du disque C:):

c:\>java -jar pngSplitter.jar "C:/Users/user/AppData/Local/Temp/test.png"

Les fichiers png extraits seront dans le même dossier que le fichier avec les images concaténées (K0.png, K1.png etc.)

Voilà, bon courage.
2
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
28 août 2010 à 01:13
Re,

Excuses pour ma réponse tardive. J'ai bien reçu ton fichier de test et il passe sans souci sur mon PC.

Pour les gros fichiers utiliser donc les options mémoire indiquées (avec 2 gigs de RAM et des fichiers de 300 megs ça devrait passer); la 2ème erreur est due à une recherche en dur (j'avais la flemme d'externaliser le path pour le dossier de création des fichiers extraits ==> j'ai décidé d'utiliser le même dossier que le gros fichier; pour ce faire je fais une recherche du caractère "/" et je ne gère pas le cas où il n'y en a pas. Utilser donc des caractères "/" et non "\" pour l'argument - comme je l'ai indiqué dans les exemples).

Bon week-end et nuit !
1
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
25 août 2010 à 11:27
Salut,

Tu fais un tit prog qui lit ton fichier et crachouille les images en tant que fichiers distincs quelque part sur le disque. Si tu ne sais pas faire, dis-moi quel sont les début et fin des images png, je pourrais t'aider.

++
0
hubertlejaune
25 août 2010 à 11:48
Salut,

Merci de ton aide si tu pourrais me faire un programme sa serai parfais ou m'expliquer comment un faire un (mais le soucis est que je n'ai jamais programmer).
Le début hexadécimal de chaque image est "89504e470d0a1a0a" et la fin "49454e44ae426082"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Désolé d'encore te déranger mais je n'obtiens que des erreurs :s
Quand je prend le fichier de base j'ai :

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at fr.hubertlejaune.PngSplitter.main(PngSplitter.java:80)


Donc je me suis dit le fichier doit être trop gros, alors j'en ai fait un plus petit et là j'ai :

0       5404    1251465
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
        at java.lang.String.substring(Unknown Source)
        at fr.hubertlejaune.PngSplitter.main(PngSplitter.java:101)


j'ai vérifier si les images n'étaient pas extraites malgré les message d'erreurs mais non :(
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
Modifié par Char Snipeur le 26/08/2010 à 16:32
Pas évidant.
Que ce passe t il si tu ouvres avec un éditeur d'image. Essai Xnview, il y a plein d'option de lignes de commande, ça peut être utile.
avant de se prendre la tête avec la programmation, sous linux, il y a peut être des utilitaires qui pourraient être utiles.
grep, cut, sed et dd.
Si toutes les images ont la même taille, dd pourra donner un résultat rapide.
en paramètrant bien grep, tu peut déterminer tout les offset de fin d'image que tu passe ensuite à dd. Si tu n'as pas Linux et que tu es prêt à installer cygwin ou msys (je ne suis pas sur qu'il y ait dd), je peux t'aider à trouver les bonnes options.
http://www.mirrorservice.org/sites/www.libpng.org/pub/png/spec/1.2/PNG-Structure.html
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
0
sandul Messages postés 3924 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 722
26 août 2010 à 16:14
Ooo, je suis navré. J'ai fait l'appli à la va-vite et
1. Le fichier est lu en entier dans la mémoire RAM. Faut pas faire cela en production XD
2. J'ai testé un peu (un fichier contenant 3 png minables concaténées); mais pas exhaustivement

On va essayer de s'occuper de ta 1ère erreur.

1. Quelle version de JVM as-tu ? Tape
java -version

dans une fenêtre DOS et copie-colle la réponse
2. Il y a des paramètres pour modifier la mémoire utilisée par la JVM. Essaie avec une commande comme
c:\>java -jar pngSplitter.jar -Xmn100M -Xms1000M -Xmx1000M ton_fichier


Quelques questions:
1. Quelle est la mémoire disponible sur ton PC ?
2. Quelle est la taille du fichier avec les images concaténées ?
3. Est-ce que tu peux m'envoyer un fichier de test (avec quelques images concaténées à l'intérieur) ? Car avec mon fichier de test c'est OK.

++
0
hubertlejaune Messages postés 1 Date d'inscription jeudi 26 août 2010 Statut Membre Dernière intervention 29 août 2010
29 août 2010 à 00:28
la commande

c:\>java -jar pngSplitter.jar -Xmn100M -Xms1000M -Xmx1000M ton_fichier

ne marche pas chez moi, par contre celle ci a très bien fonctionner

c:\>java -Xms1000M -Xmx1000M -jar pngSplitter.jar ton_fichier

Je n'ai pas essayer avec le 3ème argument


PS: c'est pas un reproche que je te fais mais juste une info au cas ou d'autres personnes auraient le même soucis
0