Images (jqm1000)

De Wiki1000

{{#images:versionlatest-32x32.png|stock}}

Ce support permet de saisir et d'afficher des images.

Saisir une image

La saisie d'une image ce fait dans le cadre d'un formulaire de saisie encapsulé dans une page.

Dans cette page vous gérez des champs de saisie, dans le code html de la page ajoutez un champ input type file pour ajouter une zone de saisie d'image :

  <div data-role="content">
    ....
     <div data-role="fieldcontain">
          <input class="imgInput" id="prof-imgInput" data-canvas="prof-photo" type="file" accept="image/*;capture=camera">
          <div><canvas id="prof-photo"/></div>
    </div>
  </div>

Dans le code javascript du document ajouter un handler d'évènement sur le changement de l'image :

<source lang="javascript">

$(document).ready( function() {

    ....
    $('.imgInput').change(function(e) {
         $.mobApp.setImageInputToCanvas(this);
    });

} </source>

Le but de ce code est de visualiser l'image sélectionnée par l'utilisateur dans l'élément canvas.

Envoyer les données de l'image

L'échange des données entre le serveur et le mobile ce fait par le format DataURL; ce format combine le type de contenu (mime) et le contenu encodé en base 64.

Javascript supporte directement DataURL par la méthode toDataURL()

Dans la méthode d'envoi des données de votre formulaire ajoutez les données de l'image comme suit:

<source lang="javascript">

$(document).ready( function() {

    ....
    $('#btnProfSend').click(function(e) {
         e.preventDefault();
         //
         var profile = {};
         profile.lastname = $("#prof-lastname").val();
         ....
         profile.photo = document.getElementById("prof-photo").toDataURL();
         //
         $.l1000.postNoCache($.l1000._api_+"/setProfile", profile, function( data ) {
         },"json");
    });

} </source>

Afficher une image

Lorsque vous souhaitez afficher une image renvoyée par le serveur il est préférable de séparer la requête retournant les informations du contexte de l'image et la requête retournant l'image elle-même.

Dans le code serveur retournant les informations détails (dont l'image fait partie) :

<source lang="delphi">

Procedure getProfile(req:Tjson; var resp:TObject); var json:TJson; inst:salarieView; indx:Integer; begin

 json := TJson.Create();
 resp := json;
  ...
    if inst.oidphoto<> then
     begin
       json.result[indx].l := 'di'; // link to a document image
       json.result[indx].h := '/getProfilePhoto'; // get document method
       json.result[indx].id:= inst.oidphoto;
       json.result[indx].v := _TP('Photo associée au profil');
       json.result[indx].idf:= 'photo';
       indx := indx+1;
     end
     else
     begin
       json.result[indx].l := 'i';
       json.result[indx].v := _TP('Le profil na pas de photo');
       json.result[indx].ico := 'alert';
       indx := indx+1;
     end;

end; </source>

Puis implémentez une méthode qui retourne l'image elle même, les données sont renvoyées au format DataURL :

<source lang="delphi"> //Procedure getProfilePhoto(req:Tjson; var resp:TObject); var json:TJson; inst:TPhotos; begin

 json := TJson.Create();
 resp := json;
 inst := TPhotos.FindObject(req.id);
 if Assigned(inst) then
  begin
    json.title := inst.Caption;
    json.id := inst.OID;
    json.imageData := inst.photo.AsDataURL;
  end;
 if json.isEmpty then
  begin
    json.title := _TP('Aucune photo retrouvée.');
    json.id := ;
  end;

end; </source>

Références

Fonction Usage
$.mobApp.setImageInputToCanvas(eltInput) Copie un fichier image retourné par un élément input dans un élément Canvas du document.
$.mobApp.setImageDataToCanvas(data,eltCanvas) Copie des données image dans un élément Canvas du document.