|
| Ajouter un machin de texte à la fin d'un fichier .png | |
| | Auteur | Message |
---|
red-error Utilisateur confirmé: Rang ****
Messages : 1015 Projet Actuel :
| Sujet: Ajouter un machin de texte à la fin d'un fichier .png Dim 27 Fév 2011 - 23:36 | |
| Hello all ! Ca fait du bien de retrouver le CBNA tout d'abord. ^^ Ensuite : Je veux rajouter du texte à la fin d'un fichier .png (meuh non, ça va pas tout casser ! Si ?) Donc, j'ai fait des tests manuellement, et ajouter des trucs à la fin du fichier ne semble pas altérer sa lecture. Mais maintenant que j'essaie de le faire avec Game Maker, ça rate. :/ Soit ça remplace tout le contenu, soit ça n'enregistre pas, mais je n'arrive pas à ajouter mon morceau de texte à la fin de mon fichier. J'ai même essayé d'enregistrer d'abord tout le contenu du .png dans une variable texte puis de réinjecter le tout, mais le texte en GM fait rater le .png. Je crois qu'il faut utiliser la fonction file_text_open_append(fname), mais je n'arrive pas à la faire fonctionner. Il me faudrait une explication de cette fonction.Mon code qui marche sauf pour le points cité : (en gras ce qui est important) - Spoiler:
/////////////////////////SAUVEGARDE IMAGE//////////var filename, fileid, test; test=0;
while(test=0) do {filename=get_save_filename(".png","NonamedPIKUBE");if filename="" {test=-1; exit;} else if file_exists(filename+".png") {//if filename_name(filename)=="NonamedKube.pk" if show_question("Le plan :#"+filename+".png"+"#Existe déjà. Voulez-vous remplacer l'ancien fichier ?") {test=1} else{test=0} } else{test=1}
} screen_save_part(filename_name(filename)+".png",X0,Y0,32*16,32*16); /////////////////////////////////////FIN SAUVEGARDE DE L'IMAGE//////////////////
//sauvegarde en format Pikube
test=0; /// DONC LE nom du fichier à compléter est filename_name(filename)+".png"
a=""; fileid=file_text_open_write(filename+".png");//C'est ici qu'il faudrait un file_text_open_append(fname);for(j=0;j<32;j+=1) for(i=0;i<32;i+=1) a+=chr(pixel[i,j]+128); file_text_write_string(fileid,a); //Ceci a pour effet d'effacer le contenu original du .png... ce qui est logique quelque part file_text_close(fileid);
Le résultat voulu étant Première partie : Le png lisible Deuxième partie après le png : des infos que je peux lire moi-même qui n'influent pas sur le png Le problème étant : je n'arrive pas à coller les infos après le png. La solution possible étant : file_text_open_append(fname), fonction dont je ne sais pas me servir. Merci d'avance !
Dernière édition par red-error le Dim 27 Fév 2011 - 23:50, édité 1 fois |
| | | onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Ajouter un machin de texte à la fin d'un fichier .png Dim 27 Fév 2011 - 23:46 | |
| C'est étrange, j'essayerais de voir pour ton code demain. Sinon as-tu essayé en mode binaire ? Tu place le curseur en fin de fichier et tu écrit ton texte byte a byte. Si ça marche pas alors GM va encore remonter dans mon estime lol. |
| | | Wargamer *Excellent utilisateur*
Messages : 6938 Projet Actuel : Bataille de cake au fruits
| Sujet: Re: Ajouter un machin de texte à la fin d'un fichier .png Lun 28 Fév 2011 - 0:00 | |
| Effectivement, une image a ses dimentions d'inclu dans son ouverture, alors il va lire que l'image et pas ce qu'il y a après. En théorie tu peux mettre ce que tu veux snas passer en binaire vu que c'est que toi qui va pouvoir le décrypter. Par contre faut que tu sache où le lire et quand arrêter.(surement en commancant par la fin et autre) si tu le fait pas tu peux même pas savoir si ca a marcher Sinon le _open_append fait que préparer le fichier pour une lecture à la fin au lieu du début, tu fait comme d'ab pour le reste |
| | | red-error Utilisateur confirmé: Rang ****
Messages : 1015 Projet Actuel :
| Sujet: Re: Ajouter un machin de texte à la fin d'un fichier .png Lun 28 Fév 2011 - 0:25 | |
| Merci ! C'est tout bête donc, au lieu d'avoir un fileid=file_text_open_write(filename+".png"); J'ai un fileid=file_text_open_append(filename+".png"); Je garde le même write et ça marche ! (c'est à dire que je vois mon texte quand j'ouvre mon .png avec Notepad++ ) Yepee. Oups, y'a juste la lecture que j'avais mal compris, je sais que je dois lire les 32*32 caractères se trouvant à 32*32 de la fin, mais je sais pas comment mettre le curseur à cet endroit précis... Finalement je suis obligé de passer par le binaire ? Quel format je dois rentrer dans byte ? Un char ? Edit : en fait je vais faire des read_string jusqu'au EOF puis avec le char que j'ai là, manipuler les 32*32. Mais ça marche pas non plus. Qu'ai-je fait de travers ? while(!file_text_eof(fileid)) {a=file_text_read_string(fileid);} |
| | | Wargamer *Excellent utilisateur*
Messages : 6938 Projet Actuel : Bataille de cake au fruits
| Sujet: Re: Ajouter un machin de texte à la fin d'un fichier .png Lun 28 Fév 2011 - 0:57 | |
| comme ya pas de fonctions seek pour les fichier texte(je crois) tu va devoir passer par le binaire |
| | | red-error Utilisateur confirmé: Rang ****
Messages : 1015 Projet Actuel :
| Sujet: Re: Ajouter un machin de texte à la fin d'un fichier .png Lun 28 Fév 2011 - 1:41 | |
| Ok, même en copiant tout le fichier y'a une erreur, il copie pas tout. Je dois faire un truc de travers. Sinon donc je suis partant pour les binaires, maif faut entrer quoi pour byte dans file_bin_write_byte(fileid,byte) ? 0 ou 1, ou autre chose comme "0", "1", true, false, ou des char ? |
| | | red-error Utilisateur confirmé: Rang ****
Messages : 1015 Projet Actuel :
| Sujet: Re: Ajouter un machin de texte à la fin d'un fichier .png Lun 28 Fév 2011 - 2:06 | |
| Allélouia, les binaires fonctionnent à merveille ! Merci Oni et Wargy, mon éditeur Pikub'art importe et exporte en machins dans un PNG dorénavant ! Dodo là. |
| | | [TheDarkTiger] Modérateur
Messages : 7420 Localisation : Essonne
| Sujet: Re: Ajouter un machin de texte à la fin d'un fichier .png Lun 28 Fév 2011 - 2:47 | |
| Si tu veux faire les choses proprement, il faudrait en fait ajouter une balise "tEXt " dans ton fichier PNG. méthode propre: - Code:
-
var Fn, f, S; var H, i, l; var IEND;
Fn = argument0; S = argument1;
//Vérif fichier if(!file_exists(Fn)) { //Pas de fichier return 1; } //show_message("yep, it's file."); f = file_bin_open(Fn, 2);
//Vérif PNG H=chr(137)+chr(80)+chr(78)+chr(71)+chr(13)+chr(10)+chr(26)+chr(10); for(i=1; i<9; i+=1) { //Pas un PNG if(chr(file_bin_read_byte(f))!=string_char_at(H, i)){return 2;} } //show_message("yup, PNG ahead.");
//Rembobine le IEND file_bin_seek(f, file_bin_size(f)-12);
//Chunk //Longueur l=string_length(S)+2; file_bin_write_byte(f, l/$1000000 mod 255); file_bin_write_byte(f, l/$10000 mod 255); file_bin_write_byte(f, l/$100 mod 255); file_bin_write_byte(f, l mod 255);
//Ecriture de "tEXt" file_bin_write_byte(f, $74); file_bin_write_byte(f, $45); file_bin_write_byte(f, $58); file_bin_write_byte(f, $74);
//Keyword file_bin_write_byte(f, ord('D')); file_bin_write_byte(f, 0);
//Texte for(i=1; i<=string_length(S); i+=1) { file_bin_write_byte(f, ord(string_char_at(S, i))); }
//CRC l=$FFFFFFFF; file_bin_write_byte(f, l/$1000000 mod 255); file_bin_write_byte(f, l/$10000 mod 255); file_bin_write_byte(f, l/$100 mod 255); file_bin_write_byte(f, l mod 255);
//Ecriture du IEND IEND=chr($00)+chr($00)+chr($00)+chr($00)+chr($49)+chr($45)+chr($4e)+chr($44)+chr($ae)+chr($42)+chr($60)+chr($82); for(i=1; i<=string_length(IEND); i+=1) { file_bin_write_byte(f, ord(string_char_at(IEND, i))); }
file_bin_close(f); Méthode dégeux : - Code:
-
var Fn, f, S, i;
Fn = argument0; S = argument1;
//Vérif fichier if(!file_exists(Fn)) { //Pas de fichier return 1; } //show_message("yep, it's file."); f = file_bin_open(Fn, 2);
//Rembobine le IEND file_bin_seek(f, file_bin_size(f));
//Texte for(i=1; i<=string_length(S); i+=1) { file_bin_write_byte(f, ord(string_char_at(S, i))); }
file_bin_close(f); La méthode propre n'est pas parfaite (pas de calcul du CRC). La méthode dégeux est dégeux . |
| | | Contenu sponsorisé
| Sujet: Re: Ajouter un machin de texte à la fin d'un fichier .png | |
| |
| | | | Ajouter un machin de texte à la fin d'un fichier .png | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |