Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Ruotare l'immagine con funzioni gd

    Ciao a tutti ho scritto la seguente funzione per l'elaborazione di un file media, in questo momento la funzione permette di ridimensionare l'immagine e di ruotarla di 90 gradi ma quest'ultima operazione viene eseguita una sola volta.

    Codice PHP:
    //file percorso completo del file
    //newheight nuova altezza
    //newwidth nuova lunghezza
    //nomeFile nuovo nome per il salvataggio delle miniature
    //gradiSx gradi di rotazione
    function elaborateMedia($file,$newheight,$newwidth,$nomeFile,$gradiSx) { 
        
        if(isset(
    $nomeFile)){
            
    $dest "../tmp/".$nomeFile.".jpg"// directory di salvataggio delle miniature create
        
    }
        
        
    $thumbComp 100
        list(
    $width$height) = getimagesize($file);
        if(isset(
    $gradiSx)){
            if(
    $gradiSx==""){
                
            }else{
                
    $destRuota "../tmp/temp.jpg";
                
    // apertura dell'immagine originale 
                
    $srcFile imagecreatefromjpeg($file) or die ("Impossibile aprire l'immagine originale"); 
                
    //Ruto l'immagine di 90 gradi
                
    $ruotaImage imagerotate($srcFile$gradiSx,0) or die("Impossibile ruotare di $gradiSx il file $file");
                
    imagejpeg($ruotaImage$destRuota$thumbComp) or die("Impossibile salvare la modifica"); 
            }
        }
        
        if(
    $newwidth != $width && $newheight != $height){
            echo
    "Nome del nuovo file: $nomeFile";
            
    // creazione dell'immagine della miniatura 
            
    $thumb imagecreate($newheight$newwidth) or die("Impossibile creare la miniatura");
            
    // apertura dell'immagine originale 
            
    $src imagecreatefromjpeg($file) or die ("Impossibile aprire l'immagine originale"); 
            
    // copio l'immagine originale in quella della miniatura ridimensionandola
            
    imagecopyresized($thumb$src0000$newheight$newwidth $height$width) or die("Impossibile ridimensionare l'immagine"); 

            
    // salvataggio miniatura
            
    imagejpeg($thumb$dest$thumbComp) or die("Impossibile salvare la miniatura"); 
        }else{
            echo
    "Non ci sono elaborazione da attuare";
        }

    La funzione di rotazione viene eseguita al onclick di un'immagine e il file in cui viene richiamata l'elaborazione dell'immagine è il seguente:
    Codice PHP:

    $x 
    $_SESSION['x']; // altezza dell'immagine
    $y $_SESSION['y']; // lunghezza dell'immagine
    $image $_SESSION['file']; // immagine da modificare
    $preview "http://www.decadeweb.it/dw-admin/uploads/$image";
    $action $_SESSION['action'];
    $nomeThumb $_SESSION['nomeThumb'];
    $gradiSx $_SESSION['gradiSx'];
    if(isset(
    $action)){
        
        
    elaborateMedia($preview,$x,$y,$nomeThumb,$gradiSx);
    }else{
        echo
    "Errore nella creazione";

    Como posso far eseguire l'elaborazione della rotazione a ogni click senza che venga eseguita l'elaborazione una sola volta?
    Immagino che avrei bisogno di un ciclo ma non ho idea su cosa posso essere il controllo del ciclo...

    Grazie a tutti

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    perdonami, ma non ho molta voglia di leggere tutto il codice, di solito per la maggior parte di utenti fa così, anche a me nessuno mi risponde quando posto pagine e pagine di codice
    Prova a spiegarmi cosa devi fare che ti aiuto volentieri

  4. #4
    In pratica sto creando un editor di immagini con le funzioni gd e al onclick di un'immagine mi parte l'elaborazione in questo caso mi permette di ruotare di 90 gradi l'immagine solo che se io riprovo a fare la rotazione con un secondo click non mi ruota l'immagine.

    La struttura dell'editor è preview a sinistra e azioni a destra, la classica grafica per un editor.

    Come posso permettere la rotazione più volte?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    poi sta sera ci do un occhio! premetto che non ho guardato, ma intanto, prima di sta sera che guardo controlla se tu la rotazione la fai sull'immagine ruotata o su quella originale...
    ciao

  6. #6
    eh... per ora viene eseguita sempre su quella originale quindi ho scoperto il problema ma non saprei risolverlo.

    Dovrei applicare un controllo, controllando l'azione dell'utente se viene cliccato una volta l'immagine viene fatta la rotazione sull'immagine originale mentre se viene cliccato nuovamente sull'immagine salvata per le modifiche temporanee ma a questo punto dovrò salvare mille immagini sul mio server per ogni rotazione eseguita, non avendo la possibilità di sovrascrivere il file.

    Dovresti capire come fare questa cosa, ovviamente io cerco una soluzione!!!!

  7. #7
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    Mi sembra di capire che quando nella tua applicazione c'è un momento in cui inizi ad applicare delle modifiche.

    Nel momento in cui parti con delle modifiche hai una visualizzazione
    immagine originale-immagine elaborata

    In quel momento, prima di visualizzare le immagini fai una copia dell'originale in un file temporaneo. Quindi nei tuoi due riquadri visualizzerai a sinistra l'originale e a destra il temporaneo. I due inizialmente saranno uguali.

    Fai una modifica e trasformi il temporaneo modificando e salvandolo ogni volta. Alla fine quando sei soddisfatto della modifica cliccherai qualcosa per per confermare le modifiche sull'originale e non farai altro che sostituire l'originale con il file temporaneo
    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

  8. #8
    si tranne una cosa non vedi il confronto tra quella originale e quella modificata vedi solo l'immagine modificata che viene salvata ogni volta in una cartella temp con il nome temp.jpg e questo secondo me è un limite perchè non mi va a sovrascrivere l'immagine già esistente con la funzione imagejpeg

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    Originariamente inviato da simone.marchese
    eh... per ora viene eseguita sempre su quella originale quindi ho scoperto il problema ma non saprei risolverlo.
    Cavolo c'ho preso? hehehe che fortuna!
    comunque, una volta avevo fatto un applicazione simile ed ero arrivato anche io al punto che avevo due immagini per ogni elaborazione, originale e editata, poi non serve che crei mille immagini bastano queste due...
    ti spiego perchè è indispensabile operar così, o meglio è uno dei tanti esempi probabilmente... se ruoti un immagine ad un grado diverso da 0/360, 90, 180 o 270 creerai sempre uno spazio vuoto, se la si ruota di 45° non avrai più la stessa base e la stessa altezza ma delle dimensioni maggiori sufficientemente grandi a contenere l'immagine ruotata... quindi se tu ruoterai quest'immagine con gli spazi vuoti, se la ruoterai gli spazi vuoti verranno considerati anche loro come immagine da ruotare... sta di fatto, che se tu ruoti di 10° un immagine e poi lo fai per altre 9 volte mattiamo, ti ritroverai con un immagine sempre più piccola...

    Ti do alcuni punti da considerare per il tuo script, perchè son cose che ti accorgerai comunque programmando, dei problemi che salteran fuori, almeno velocizzi tutto senza fare arrori logistici che magari non hai considerato

    1) tieni due immagini: originale e editata, e salvati sempre con delle variabili, vedi tu il metodo che preferisci se con POST, GET o SESSION tutte le modifiche, quindi angolo di rotazione, grandezza, posizione sul piano, colore... tutto insomma!
    perchè mettiamo caso: uno ruota l'immagine e ok, avrà l'immagine girata, poi gli vuol cambiare le dimensioni, ma se lavori su quella editata è fasato il dato perchè le dimensioni saran cambiate al momento della rotazione allora quando uno clicca su modifica dovrà ripercorrere tutti gli stadi, prende l'originale, la ridimensiona e poi la ruota, ma per far questo ti devi salvare di quanto è ruotata (rispetto all'originale l'immagine ruotata)
    2)nel upload dell'immagine considera che se un utente carica un file che ha lo stesso nome di un file già esistente deve essere segnalato o automaticamente rinominato: es: nomefile.jpg, nomefile(1).jpg nomefile(2).jpg ecc...
    3) quando uno salva l'immagine originale eliminala

    questo ti risponde anche alla domanda che hai fatto: "Dovresti capire come fare questa cosa, ovviamente io cerco una soluzione!!!!"

    perchè se tu hai salvato l'angolo di rotazione che mettiam caso sia 30 e l'utente dice, tuotala di 40 vorrà dire che prenderai l'immagine originale e la ruoterai di 30+40

    spero di esserti stato utile, ciao

  10. #10
    Si sei stato utile visto che alcune cose non le avevo considerate.
    Speravo anche in un pò di codice o link dove poter far riferimento, anche a costo di ricostruire tutto il codice intanto per ora è per uso personale.

    Comunque in questo momento tutti i dati vengono salvati in sessione e questo secondo me potrebbe creare un problema ti vado a spiegare il perchè.
    In questo momento ho un'unica funzione che fà tutte le operazioni e dovrò apportare delle modifiche a quest'ultima magari spezzandola perchè nei controlli che faccio esiste sempre un valore anche se l'utente non applica la modifica.
    Non sò se hai capito quest'ultimo pezzo...

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.