1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

AIDE [Résolu] Compresser une image

Discussion dans 'Windev Mobile' créé par ANDRE3000, Août 9, 2018.

  1. ANDRE3000

    ANDRE3000 Member

    Inscrit:
    Juin 5, 2018
    Messages:
    40
    J'aime reçus:
    2
    Bonjour à tous j'espère que vous allez bien? Je développe actuellement une application avec windev mobile 20 qui me permet de uploader des des images dans ma base de donnée le problème est le suivant lorsque j'upload les images dans cette base de données les images varie .soit certaines images à une taille de 2 Mo et d'autres vont jusqu'à 8 Mo le problème est que tous ces fichiers en enregistrant dans la base de données devient trop lourde . ce que j'aimerais savoir est il possible de compresser les images que j'upload en une taille identique par exemple tous les images uploader seront compresser à la taille de 1 Mo merci d'avance
     
    rayan apprécie ceci.
  2. Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    196
    J'aime reçus:
    147
    Bonjour,

    C'est délicat de savoir la taille a l'avance .. ça dépend tellement du contenu de l'image.
    Par contre il est tout a fait possible de réduire la qualité d'une image JPG pour diminuer sa taille. (le JPG étant déjà un format compressé, on peut pas compresser d'avantage sauf en réduisant la qualité)


    Il suffit pour cela d'utiliser la fonction

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    :

    Exemple :

    Code (Windev):

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (IMG_MonChampImage, sRepertoireDonnées, 75)
     
    On peut approfondir, en faisant une boucle :
    Code (Windev):

    bTailleOk est un booléen = Faux
    nTauxCompression est un entier = 90
    TANTQUE ( (bTailleOk = faux )_ou_ (nTauxCompression < 10) )
       

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (IMG_MonChampImage, sCheminFichier, nTauxCompression )  
       SI

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    (sCheminFichier) < 1024 ALORS // si la taille est  inférieure à 1024  octets (soit 1Mo)
           bTailleOk = Vrai // Ok on sort de la boucle
       SINON
           nTauxCompression -=  10 // on baisse la qualité
       FIN
    FIN
     
    Ici, tant que le fichier ne fait pas moins de 1Mo ou que le taux de compression n'atteint pas 10 on compresse.
     
    ANDRE3000, suenodesign et joker aiment ça.
  3. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    1,467
    J'aime reçus:
    844
    Sa mobile il n'est pas nécessaire d'avoir des images de format 3 mètres.
    Tu regarde le champ le plus grand de ton application et tu redimentionne a la taille qu'il faut cela réduira aussi le poid.
    voir

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


    après la solution de

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    est très bien.
     
    ANDRE3000, suenodesign et joker aiment ça.
  4. Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    196
    J'aime reçus:
    147

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    Je crois même que l'on peut le faire avec une variable de type Image, puis utiliser les fonctions "d"

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    par exemple

    Il y a même moyen apparemment d'appliquer des modes d'affichage aux images mais je ne me souviens plus de l'info.. :(
     
    joker et suenodesign aiment ça.
  5. redha2010

    redha2010 Active Member

    Inscrit:
    Jan 25, 2018
    Messages:
    157
    J'aime reçus:
    163

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Bonjour à tous j'espère que vous allez bien? Je développe actuellement une application avec windev mobile 20 qui me permet de uploader des des images dans ma base de donnée le problème est le suivant lorsque j'upload les images dans cette base de données les images varie .soit certaines images à une taille de 2 Mo et d'autres vont jusqu'à 8 Mo le problème est que tous ces fichiers en enregistrant dans la base de données devient trop lourde . ce que j'aimerais savoir est il possible de compresser les images que j'upload en une taille identique par exemple tous les images uploader seront compresser à la taille de 1 Mo merci d'avance
    Cliquez pour agrandir...
    si tu enregistre tes photos dans ta base de données , le problème restera posé car la décryptage des photos rendra l'accé a ta base de données lourds
    je préféré de stocker les images aprés l'upload sur le serveur dans un répertoire images et sauvegarde simplement le nom du photo dans un rubrique texte
    l'affichage sera plus rapide que d'utiliser l'affichage des photos stockés dans une rubrique photo
     
    suenodesign, ANDRE3000 et Ezekiel056 aiment ça.
  • Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    196
    J'aime reçus:
    147

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    c'est un choix aussi effectivement.
    Il y a des partisans du pour et du contre.

    Personnellement je préfère ta méthode aussi, c'est plus flexible ;)
     
  • Man

    Man Active Member

    Inscrit:
    Juil 9, 2018
    Messages:
    224
    J'aime reçus:
    45
    Bonjour à tous il est vrai que je viens très tard à ce sujet j'utilise toujours ce code
    [windev]// Donne la rotation de l'image
    import android.media.ExifInterface;
    import java.lang.Exception;
    import android.graphics.*;
    import android.util.Log;
    import java.io.FileOutputStream;

    public static boolean TraitePhotoJava(String sPhoto, int nTailleMax){
    int nRotation = 0;
    boolean res = false;

    try{
    ExifInterface m_exif = new ExifInterface(sPhoto);
    nRotation = (int)exifOrientationToDegrees(m_exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,ExifInterface.ORIENTATION_NORMAL));

    // BITMAP
    BitmapFactory.Options bounds = new BitmapFactory.Options();
    // Réduit la taille
    Bitmap sourceBitmap = BitmapFactory.decodeFile(sPhoto,bounds);

    if (sourceBitmap == null){
    return false;
    }

    // Rotation
    Matrix matrix = new Matrix();
    if (nRotation > 0) {
    matrix.preRotate(nRotation);
    }

    // redimensionnement
    int width = sourceBitmap.getWidth();
    int height = sourceBitmap.getHeight();
    int newWidth;
    int newHeight;
    if (width > height){
    newWidth = nTailleMax;
    newHeight = (int) nTailleMax * height / width;
    }
    else{
    newHeight = nTailleMax;
    newWidth = (int) nTailleMax * width / height;
    }
    float scaleWidth = ((float) newWidth) / width;
    float scaleHeight = ((float) newHeight) / height;
    matrix.postScale(scaleWidth, scaleHeight);


    // Création du nouveau bitmap
    Bitmap resizedBitmap = Bitmap.createBitmap(sourceBitmap, 0, 0, width, height, matrix, true);
    sourceBitmap.recycle();

    if (resizedBitmap == null){
    return false;
    }

    // Sauvegarde
    FileOutputStream out = new FileOutputStream(sPhoto);
    res = resizedBitmap.compress(Bitmap.CompressFormat.JPEG , 100, out);
    resizedBitmap.recycle();

    resizedBitmap = null;
    sourceBitmap = null;

    return res;
    }
    catch(Exception e) {
    Log.e("MO",e.toString());
    return false;
    }

    }

    public static float exifOrientationToDegrees(int exifOrientation) {
    if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) {
    return 90;
    } else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) {
    return 180;
    } else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) {
    return 270;
    }
    return 0;
    }[/windev]
    après j'appelle la procédure dans le callback
    [windev]// Traitement des données exif et redimensionnement
    TraitePhotoJava(FEN_Scan.gsPhotoAjout,TAILLE_MAX_PHOTO)

    // Chargement du buffer
    bufIMG = fChargeBuffer(FEN_Scan.gsPhotoAjout)[/windev]
     
    joker apprécie ceci.
  • Partager cette page

    Chargement...