Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    ridimenzionare immagini client side

    Salve a tutti,
    Ho deciso di scrivere qua perché non so più dove sbattere la testa.

    Ho sviluppato una galleria fotografica in html5+php.
    Però ho un problema.
    Al momento eseguo l'upload delle foto (upload multiplo) e le ridimensiono con php, quindi lato server, con tempi di caricamento disumani.

    Sapete come fare (credo in JavaScript o jquery) per prendere le immagini appena selezionate nella form, ridimensionarle lato client e successivamente inviarle tramite POST alla pagina php che ne inserisce l'url nel database e esegua l'upload su server?
    (la pagina php la so fare e funziona già, mi servirebbe solo la parte client)

    Attendo impazientemente risposte, e sono disposto ad approfondire JavaScript, jquery, canvas o chi più ne ha più ne metta.

    Grazie a tutti,
    Un saluto,

    Gianmaria.
    giamma.rossi.24@hotmail.it

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Ciao Gianmaria benvenuto, ho qualche dubbio che resize lato client sia la soluzione possibile è migliore, io se le immagini sono molto grandi limiterei le dimensioni o non eseguirei upload multipli.
    Comunque in rete trovi upload resize lato cliente googla.


    P.S. Non è mai buona cosa scrive email nei post per lo spam, valuta se chiedere la rimozione ad un moderatore di sezione
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Il problema è che sono foto di eventi, fatte da cellulare(soprattutto s5 o iphone) o da fotografi professionisti (ognuno dei quali ha i permessi per creare e gestire gli album fotografici) e le foto devono essere caricate facilmente. (per quello la selezione multipla, è inimmaginabile caricare 30-40 foto aggiungendone una alla volta)
    Per la mail, se qualcuno me la rimuove va bene, semmai Pace, tanto è una Casella di posta che non uso molto.

    Devo velocizzare il resize, e l'upload.
    Se server-Side non basta la potenza o Banda o quello che vi pare, credo che fare lavorare di più il client (che ad ora non fa nulla) non guasti.

    Su internet ho cercato, ci sono troppe cose, di cui la metà non funzionano. Per quello chiedevo a voi.

    C'è qualcuno che ha dovuto creare una galleria fotografica? Come l'ha gestita?

    Io sinceramente pensavo di intercettare il valore dell' input dal form tramite selezione JavaScript o jquery, andare a ridimensionare le foto una a una e mandarle una alla volta alla pagina php tramite POST che le rinonima, ne esegue l'upload nella cartella giusta e ne salva url su database.

    Però non so come intercettare e modificare l'immagine e come mandarla alla pagina .php

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Per ridimensionare le immagini lato client puoi usare il canvas, per capire come "intercettare" le immagini dipende da come gestisci l'upload multiplo. Due link che possono tornarti utili:

    https://developer.mozilla.org/en-US/...eringContext2D
    http://stackoverflow.com/questions/1...fore-uploading

    Nel secondo c'è un esempio di codice.

  5. #5

    nuovo errore

    Ragazzi ho un piccolo problema, seleziono i file, lo script ne ridimenziona alcuni e altri mi da errore e non disegna l'immagine, poi l'upload ajax l'ho fatto e funziona.

    l'errore che mi da firebug e':

    codice:
    -Image corrupt or truncated: blob:http://127.0.0.1/c399e3e3-c7e0-4bff-8385-6ebcaa75918a
    
    
    
    
    
    NS_ERROR_NOT_AVAILABLE: 
    
    
    -bigctx.drawImage(Bigimg, 0, 0, Bwidth, Bheight);
    -Image corrupt or truncated: blob:http://127.0.0.1/bffdb046-ddee-419c-a8a0-ad3cc4d31c65 NS_ERROR_NOT_AVAILABLE:
    - SmallCtx.drawImage(SmallImg, 0, 0, width, height);
    e lo fa per alcune foto, per altre no, e sempre su foto diverse.


    vi metto il codice, togliendo le cose che non vi servono e lo commento il piu possibile.
    per favore aiutatemi.
    credo che non riesca a caricare la foto prima di disegnarla anche se lo metto dentro img.onload();

    questa e' la pagina php

    Codice PHP:
    <script type="text/javascript" src="libreria3.js"></script>
    <h3>Clicca per inserire le foto.</h3>
    <div id="upload_file"></div>    <-- dove vado a creare il form e le anteprime

    <div style="float: left; width: 500px" id="status" >  <-- mi e' servito per il debug ma non serve a nulla
        <h2>Stato</h2>
    </div>
    <br>
    <div  id="tempfoto" hidden></div> <-- qua creo i canvas  temporanei dove metto le foto ridimensionate e le salvo in DataURL 
    il codice javascript e' questo:

    libreria3.js

    codice:
    //funzione per disegnare la barra di avanzamento
    
    //funzione che ridimenziona la foto e successivamente la andra ad inviare via ajax
    function SendFoto(foto,seq){
        
                //ridimenziono immagine in formato grande.
                var Bigimg=document.createElement("img");
                
                //creo il canvas temporaneo per la foto
                $("#tempfoto").append("<canvas id=\"TmpBigCan"+seq+"\">Caricamento non supportato</canvas>");
                var bigcanvas = document.getElementById('TmpBigCan'+seq);
                var bigctx = bigcanvas.getContext("2d");
                
                if (bigcanvas.getContext){
    
                    Bigimg.src = window.URL.createObjectURL(foto);
                    Bigimg.onload = function(){
                    
    //ridimenziono la foto
                    var BMAX_WIDTH = 1300;
                    var BMAX_HEIGHT= 1300;
                    var Bwidth = Bigimg.width;
                    var Bheight = Bigimg.height;
                    if (Bwidth > Bheight) {
                         if (Bwidth > BMAX_WIDTH) {
                           Bheight = Math.round(Bheight*(BMAX_WIDTH / Bwidth));
                            Bwidth = BMAX_WIDTH;
                              }
                        } 
                    else {
                          if (Bheight > BMAX_HEIGHT) {
                            Bwidth = Math.round(Bwidth*(BMAX_HEIGHT/Bheight));
                            Bheight =BMAX_HEIGHT;
                              }
                        }
    //mi riscrivo larghezza e altezza ricavata, mi serve solo per il debug                
    $("#tempfoto").append("<hr><p>width: "+Bwidth+" height: "+Bheight+"</p>");
                
    //ridimensiono il canvas e disegno la foto
                    bigcanvas.width = Bwidth;
                    bigcanvas.height = Bheight;
                    bigctx.drawImage(Bigimg, 0, 0, Bwidth, Bheight);
                    var bigdataurl= bigcanvas.toDataURL("image/jpeg",1);
                   }            
                }
                
                
                //ridimenziono immagine da usare come anteprima. faccio la stessa cosa ma con la foto piu piccola
                var SmallImg=document.createElement("img");
                 
                $("#tempfoto").append("<canvas id=\"TmpSmallCan"+seq+"\">Caricamento non supportato</canvas>");
                var SmallCanvas = document.getElementById('TmpSmallCan'+seq);
                var SmallCtx = SmallCanvas.getContext("2d");
                
                if (SmallCanvas.getContext){
                    SmallImg.src = window.URL.createObjectURL(foto);
                
                    SmallImg.onload = function(){
                    
                    var MAX_WIDTH = 350;
                    var MAX_HEIGHT= 350;
                    var width = SmallImg.width;
                    var height = SmallImg.height;
                    if (width > height) {
                         if (width > MAX_WIDTH) {
                           height = Math.round(height*(MAX_WIDTH / width));
                            width = MAX_WIDTH;
                              }
                        } 
                    else {
                          if (height > MAX_HEIGHT) {
                            width = Math.round(width*(MAX_HEIGHT/height));
                            height = MAX_HEIGHT;
                              }
                        }
                    SmallCanvas.width = width;
                    SmallCanvas.height = height;
                    SmallCtx.drawImage(SmallImg, 0, 0, width, height);
                    var SmallDataUrl= SmallCanvas.toDataURL("image/jpeg",1);
                     //adesso ho il DataURL della foto grande e di quella  piccola e la invio con ajax ( l'invio funziona e non da errori)
     }            
                }
    
                
    };
    
    //il documento e' caricato
    $(document).ready(function () {
    
    //creo il form
         $("#upload_file").append("<input type=\"file\" class=\"S_carica\"  multiple><button class=\"B_carica\">Carica</button>");
        //se clicco su carica
        $('.B_carica').bind('click', function() {
            
            var FileEnd=0; //numero di file completati
            var NotImage=0; //file non accettati ( non immagini )
            
            var input = document.querySelector("input[type='file']");
            var NumFile = input.files.length;
            
    //nascondo il form e metto un button per annullare l'upload
            $(".B_carica").hide();
            $(".F_carica").show("slow");
            $("#upload_file").append("<button class=\"F_carica\">Blocca Caricamento</button>");
    //se clicco sul button, annullo l'upload ricaricando la pagina.        
    $('.F_carica').bind('click', function() {
                var annulla = window.confirm("Premi su Ok per annullare il caricamento delle foto");
                 if (annulla) {
                  window.location.reload();
                  }
                });
            
             $("#upload_file").append("<h3>foto caricate:<h2  id=\"ContatoreFile\">"+FileEnd+"/"+NumFile+"</h2></h3>");
            
            if (NumFile==0) {
                    window.alert("Devi prima selezionare delle foto");
                    window.location.reload();
                    return;
                    }
       
    //scorro le immagini    
            for (var i = 0; i < NumFile; i++) {
                
                
                if (!file.type.match(/image.*/)) {
    // Questo file non e' un immagine, incremento il numero di file completati e non faccio nulla.
                            NotImage++;
                            FileEnd++;
                             $("#ContatoreFile").replaceWith("<h2 id=\"ContatoreFile\">"+FileEnd+"/"+NumFile+"</h2>");
        
                             }
                   else{
    //se i file sono immagini
                            SendFoto(file,i);
                            }//else
    
            }//for
            
        });
    });// chiusura pagina caricata

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.