IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

.mpo vers .jpg


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 45
    Points : 35
    Points
    35
    Par défaut .mpo vers .jpg
    Bonjour,
    j'ai 65 ans et suis assez mauvais, pourtant on me demande de développer une fonction en php qui transformerait une image avec l'extension .mpo en une image .jpeg contenant les deux premières images du .mpo.
    J'ai lu la norme CIPA DC-007-Translation- 2009 et je pense savoir comment faire théoriquement.
    Pratiquement, il en va autrement.
    *
    Donc, je décris:
    Le site internet d'un ami, dédié a l'imagerie en 3D stéréo, dispose d'un forum sur lequel les visiteurs postent leurs créations;
    Tant que les images postées sont incluses dans des .jpeg, tout va bien, l'image s'upload et s'affiche dans le post comme souhaité;
    Mais s'il est question d'un fichier multi-vues comme le sont les fichiers 3Ds au format .mpo, alors seul le fichier est visible (il a déjà fallu que je force WP a accepter les fichier en .mpo), téléchargeable et affichable dans un soft dédié mais impossible d'afficher une image dans le site.
    Ce que je voudrais, c'est qu'après le upload d'un .mpo, le post affiche les deux premières images du .mpo en une seule image double largeur reprenant, cote-a-cote, les deux images contenues dans le .mpo. QUOI DE PLUS SIMPLE, dit comme ca ?
    *
    Donc, il suffit d'ajouter un filtre, dans "function.php" du thème (sur WordPress), sur les fichiers joints qui ont une extension .mpo et si c'est le cas, rechercher les magic number de debut d'image (chaine FFD8 FFE1);
    Prendre l'adresse du second (car le premier est celui de la première image);
    Isoler et faire un fichier imageG.jpeg de tout ce qui se trouve avant, puis isoler et créer un autre fichier imagesD.jpeg avec tout ce qui se trouve après, (ou entre le 2eme et le 3emme magic number suivant.)
    *
    Ceci dit, je ne sais fichtrement pas comment commencer tout ca....
    Comme j'aime gratter mon apex déplumé et ne pas trop céder a la facilité afin d'apprendre, donnez moi seulement des pistes a suivre (dans un premier temps), SVP
    Cdt.
    Gilles

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    Re
    Ce que j'ai décrit ci-dessus, je viens de le faire a la main a l'aide d'un éditeur hexa (010 Editor); Ca fonctionne parfaitement et est finalement assez trivial.... mais comment l'automatiser ?
    ++

  3. #3
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 440
    Points : 15 814
    Points
    15 814
    Par défaut
    pour lire le contenu d'un fichier, vous pouvez commencer par utiliser la fonction fread.
    elle permet de lire le début du fichier et de s'arrêter sans avoir besoin de charger le fichier complet dans une variable.

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Des pistes de réflexions :

    1- Définir la séquence à trouver dans le fichier binaire qui marque le début d'une image
    2- Transformer cette séquence en valeure binaire via hex2bin
    3- Ouvrir le fichier avec fopen
    4- Lire avec fread par paquet de la taille de la séquence à trouver (au moins le temps de trouver la séquence , tu peux augmenter après)
    5- Tu compares chaque paquet lu à la séquence encodé en binaire.
    6- Dès que tu as trouvé ta séquence tu copie tous les paquets dans une autre variable jusqu'à ton délimiteur de fin ou pour n octet si tu connais la taille de l'image.
    7- Tu écris les byte copié dans un fichier .jpg avec file_put_contents()
    8- Répète de 4 à 7 pour chaque image contenu dans le .mpo
    9- ferme le fichier

    Un truc dans le genre (non testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $seq = "FFD8FFE1";
    $search = hex2bin($seq);
    $f = fopen($filename, "r") or die("Unable to open file!");
    while(!feof($f)){
        $read = fread($f, 4);
        if($read == $search){
            echo "Trouvé";
            break;
        }
    }
    fclose($f);
    Ca va probablement être lent , mais ça va marcher.
    Une optimisation possible , sera de lire des plus gros buffers d'un coup et de chercher dans ces buffers la séquence. Plus tes buffers de lecture sont petits , plus les accès disque sont nombreux et plus c'est lent.

    Il est peut être aussi possible de passer par la fonction unpack, sans certitude

    Je te conseille fortement dans un premier temps de faire tes essai hors wordpress , dans un script tout simple. Une fois que ca marche tu ré-implémente dans wordpress avec ses subtilités

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    Merci Grunk pour ce fil d'Ariane détaillé.
    Effectivement, je voyais la chose soit comme tu proposes, soit en chargeant en une seule fois tout le fichier et en le traitant ensuite.
    Grace à tes indications, je découvre https://www.php.net/manual/fr/ ou je peux lire le vocabulaire et la syntaxe de PHP; Ca va bien m'aider aussi.
    Juste une autre question, si je ne veux pas de langage interpreté, ai-je la possibilité d'écrire la fonction en C, disons C++, et de l'appeler ? Ca me semblerait bien utile que ce soit possible .
    (vous l'aurez compris, je débute totalement avec tout ce qui a un rapport avec Internet)
    ++

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Oui tu peux tout à faire un executable en C ou C++ (ou tout autre langage) et l'appeler via PHP au travers de fonction comme exec().
    Tu n'auras pas une intégration transparente , mais tu peux lancer un executable (ligne de commande) et récupérer un retour.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    Bah oui, Grunk, ca serait pas mal car en dépit de la trivialité du sujet pour des informaticiens confirmés, cette fonction, bien utile aux amateurs d'images en 3D stéréoscopiques, ne semble pas exister.
    Du coup, il est très peu commode de partager ses oeuvres sous l'extension .mpo dans les forums; Il faut sans cesse montrer ses images via deux fichiers indépendants qui ne satisferont jamais tout le monde car à chacun sa méthode favorite pour voir des images 3Ds.
    J'ai déjà mis coté serveur une fonction(qu'on m'a demandé de garder secrète) permettant de calculer la base (l'écart entre les deux points de vue au moment de la capture), je peux donc également y mettre cette fonction d'affichage d'un .mpo.
    ++

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    Re
    Si on part du principe que je sais a peu près rédiger un programme exécutable (.exe) avec un univers de développement genre Visual Machintruc en C#;
    Alors, j'étudie bien a fond le codage des headers des .mpo selon la norme et je réalise l'extraction des images en lisant les fichiers d'entête et en extrayant les informations qui indiquent le nombre d'images, les offset et les tailles des fichiers .jpeg.
    Mais ensuite, alors que je sais enregistrer les .jpeg individuels dans le même dossier que l'image .mpo d'origine par exemple, je ne sais pas quoi faire des fichiers .jpeg dans le cadre d'un appel en php via exec() car je ne veut pas les enregistrer coté clients mais coté serveur, dans le billet a l'origine du .mpo
    Donc, a la relecture du dernier conseil de Grunk, je ne comprends pas comment récupérer les fichiers de sortie pour les faire s'intégrer dans la page.

  9. #9
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    - Soit tu normalises ton nommage de jpeg, par exemple :
    fichier.mpo va générer fichier_1.jpg et fichier_2.jpg
    Et dans ce cas en PHP tu peux très simplement faire ce que tu veux des jpg une fois l'appel à exec() terminé.

    - Soit ton programme (.exe) retourne les noms des 2 fichiers générés sous la forme d'une chaîne avec séparateur. Retour que tu récupères dans une des variables passée à exec() et que tu traites ensuite.

    - Soit le nom des fichiers jpg de sortie est spécifié en entrée de ton programme : exec('mpoconverter.exe upload.mpo monfichierjpg_1 monfichierjpg_2') et c'est donc ton programme qui produit un fichier nommé comme le code PHP le souhaite.

    Je ne pense pas qu'il y'est de "meilleure" solution , la première reste cependant la plus simple mais aussi la moins robuste car basée sur des conventions de nommage.

    Tu te retrouves ainsi avec le nom du fichier (et pas le fichier en lui même). A partir de là tu en fait ce que tu veux. Soit tu le copie dans un dossier approprié , soit tu ajoutes le chemins dans une bdd , etc ...

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 45
    Points : 35
    Points
    35
    Par défaut
    Merci Grunk,
    Je pense donc opter pour la dernière solution.
    ****
    Je profite de ce billet pour dire tout le bien que je pense des informaticiens qui me répondent ici et ailleurs;
    Ils redonnent toute sa noblesse au mot "communauté'.
    ++

Discussions similaires

  1. [XL-2010] bug hyperlink vers .jpg depuis version 2010
    Par popi33370 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 22/10/2013, 12h45
  2. [PDF] PDF vers JPG
    Par Pgs dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 16/12/2010, 16h06
  3. Conversion BMP vers JPG ou PNG
    Par toine92 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 31/03/2010, 12h25
  4. Pb de conversion emf vers jpg de grandes images
    Par B-Technix dans le forum Delphi
    Réponses: 9
    Dernier message: 19/06/2007, 00h07
  5. Exportation vers des formats jpg, bmp, pdf
    Par lio33 dans le forum MFC
    Réponses: 5
    Dernier message: 19/05/2006, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo