projet-reseaux-trophiques-equipe-3b / Convertion_jsonTopng / convertion_MMD_PNG.c
convertion_MMD_PNG.c
Raw
//
// Created by Alban on 25/11/2024.
//
#include "convertion_MMD_PNG.h"


// Fonction pour vérifier si un dossier existe, sinon le créer
void ensure_directory_exists(const char *dir_path) {
    struct stat st = {0};
    if (stat(dir_path, &st) == -1) {
        if (mkdir(dir_path) == 0) {
            printf("Dossier cree : %s\n", dir_path);
        } else {
            perror("Erreur lors de la creation du dossier");
            exit(EXIT_FAILURE);
        }
    }
}

// Fonction pour vérifier si une extension est ".mmd"
int has_mmd_extension(const char *filename) {
    const char *dot = strrchr(filename, '.');
    return dot && strcmp(dot, ".mmd") == 0;
}

// Fonction pour extraire le nom de fichier sans répertoire ni extension
void get_filename_without_extension(const char *path, char *output) {
    const char *base = strrchr(path, '/');
    base = (base) ? base + 1 : path;

    char filename[256];
    snprintf(filename, sizeof(filename), "%s", base);

    char *dot = strrchr(filename, '.');
    if (dot) {
        *dot = '\0'; // Retirer l'extension
    }
    snprintf(output, 256, "%s", filename);
}

// Fonction pour construire une commande pour mmdc
void convert_to_png(const char *input_file, const char *output_file) {
    char command[1024];
    snprintf(command, sizeof(command), "mmdc -i \"%s\" -o \"%s\" > NUL 2>&1", input_file, output_file);
    int result = system(command);//la ligne du dessus empeche le printf produit par system avec > NUL 2>&1
    if (result != 0) {
        fprintf(stderr, "Erreur lors de la conversion de %s\n", input_file);
    } else {
        printf("Fichier converti : %s\n", output_file);
    }
}

// Fonction principale : Convertir un fichier spécifique
void convertion_mmd_png(nom_fichier_extension * nomFichierExtension) {
    // Vérifier si le fichier a l'extension .mmd
    if (!has_mmd_extension(nomFichierExtension->nom_fichier_mmd)) {
        fprintf(stderr, "Erreur : Le fichier %s n'a pas l'extension .mmd\n", nomFichierExtension->nom_fichier_mmd);
    }

    // Assurez-vous que le dossier IMG existe
    ensure_directory_exists(IMG_DIR);

    // Vérifier si le fichier d'entrée existe
    struct stat st;
    if (stat(nomFichierExtension->nom_fichier_mmd, &st) != 0) {
        perror("Erreur : Le fichier specifié est introuvable");
    }

    // Extraire le nom du fichier sans extension
    char output_filename[256];
    get_filename_without_extension(nomFichierExtension->nom_fichier_mmd, output_filename);

    // Construire le chemin complet du fichier de sortie
    char* output_file=malloc(512*sizeof(char));
    snprintf(output_file, 100*sizeof(output_file), "%s/%s.png", IMG_DIR, output_filename);
    // Convertir le fichier
    convert_to_png(nomFichierExtension->nom_fichier_mmd, output_file);

    printf("Conversion terminee pour le fichier : %s\n", nomFichierExtension->nom_fichier_mmd);
    strcpy(nomFichierExtension->nom_fichier_png, output_file);
}

void convertionPNGSimulation(){
    ensure_directory_exists(IMG_DIR);
    struct stat st;
    if (stat("MMD/simulation.mmd", &st) != 0) {
        perror("Erreur : Le fichier specifié est introuvable");
    }
    char output[256];
    snprintf(output, 256, "%s", "IMG/simulation.png");
    convert_to_png("MMD/simulation.mmd", output);
}