PHP: Aiuto con upload immagini che si auto tuotano

sebastianoweb

Nuovo Utente
10 Giu 2016
27
0
1
Ciao a tutti,
E' l'ennnesimo post che faccio su una discussione simile perchè sto perdendo la pazienza:
Allora il problema è questo:
Sul mio sito tramite FTP carico manualmente delle immagini, queste sono dritte e precise, ma sul sito alcune di queste non so perchè si vedono ruotate senza che la foto sia rotata di origine.
Stesso problema con upload tramite smartimage, io uploado la foto originale dritta e lui non so perchè funziona tutto, me le ridimensiona ma si vedono sempre ruotate.
Pensavo potesse essere un problema di risoluzione visto che il problema me lo fa con le foto scattate dal cellulare ma non è quello perchè con smartimage le ridimensiono quindi la risoluzione è più bassa e quindi sia su pc che cellulare ne dovrebbero girarsi e ne dovrebbero vedersi male:
Inutile postarvi il codice perchè tanto si tratta di codice php per upload, unica cosa che potrebbe non piacergli è la direttiva max-width:100%; nei css che utilizzo per avere delle foto responsive visto che il sito deve essere visitato anche su cellulari.

Come posso risolvere?
Vi prego, grazie... nei css non ho alcuna direttiva di rotazione, cosa devo modificare?
esempio css che ho creato:
#random_foto img {
max-width:100%;
}
il box che contiene l'immagine è largo 20%; mentre il layout di tutta la pagina è di 1024px

Ciauz
 
ciao
non conosco smartimage anche perchè il php per ridimensionare/ruotare/uploaddare l'ho fatto manina manina.
però mi viene un dubbio, verifica se l'effetto di rotazione ti avviene su immagini riprese con la fotocamera verticale o con il cellulare orizzontale.
non so se dico una bestialità ma i programmi di trattamento dell'immagine quando carichi una foto (es fatta con fotocamera verticale) ti chiedono se vuoi ruotarla
potrebbre essere che smartimage se trova una foto di larghezza minore dell'altezza la ruoti automaticamente mettendo l'altezza (lato maggiore) in orizzontale
 
Ciao e grazie per la risposta,

Le foto sono state scattate con il cellulare e sono verticali, , quando le carico e le ridimensiono quindi le passo al php e nell'ftp queste ma solo alcune si ruotano.
Molto molto strano io non capisco perché, tra l'altro se poi mi scarico sul PC o sul cellulare la foto ruotata ovviamente me la salva ruotata non dritta, quindi non è solo un problema di visualizzazione ma proprio di rotazione vera e propria boh resto in attesa di altre risposte grazie mille
 
ciao
non ho capito bene, facciamo un esempio:
tu carichi sul pc 3 foto (scrivo i valori a caso) di 400x800 px (tutte scattate verticali), ora se le visualizzi vedi la foto 1 e 2 giuste (400x800) e la foto 3 ruotata (800x400), è così?
i file immagini contengono le informazioni di scatto tra cui le informazioni di rotazione, ora se le guardi con esplora risorse/anteprima vedi la foto 1 e 2 giusta, ma la foto 3 messa in orizzontale probabilmente si è sfalsata l'informazione di rotazione durante lo scatto.
se è così prima di caricarle in remoto (con fpt o smartimage) devi riportare la foto al giusto orientamento o con l'opzione di windows (ruota immagine) o meglio con un programma di fotoritocco
 
Ciao,
Si, hai capito bene, ho visto che:
Se apro la foto con Paint di Windows, nelle proprietà dell'immagine come larghezza me la da più bassa dell'altezza mentre con il php e la funzione list($width,$height,$type,$attr)=getimasesize("foto.jpg"); la larghezza è più alta dell'altezza.
Questo non è chiaro, non capisco perchè il php mi scambia le risoluzioni, in pratica quello che su pant vedo nell'altezza, in php lo vedo nel width.
Forse devo provare a fare un controllo:
se width è minore dell'height, crea la variabile nuovo-width con il parametro dell'height e viceversa e poi uso le nuove variabili da passare a smartimage.
Che ne pensi di questa cosa?
A questo punto però, anche se risolvessi il problema in questo modo, non è normale che il PHP mi scambi le risoluzioni... non credo che Paint me le scambi lui perchè se pur molto banale è comunque un programma di foto che ti consente di disegnarci, ruotare e modificare risoluzione.
Boh... intanto posso provare con questo algoritmo che ti dicevo, che ne pensi?

Grazie per la risposta...
 
Ciao,
Allora ho fatto una prova con la condizione citata sopra, adesso le immagini che il php mi scambia le risoluzioni me le lascia giuste di risoluzione, quindi stessa risoluzione su pc che con php, ma in ogni caso sul sito me le ruota cioè appena il file tocca l'ftp ecco che nonostante la risoluzione giusta la foto risulta ruotata quindi non è un problema di risoluzione, e allora che cavolo è?
Per favore datemi una mano perchè qua la cosa è stranissima, il sito è del mio matrimonio se volete provare a fare una prova di upload immagini nell'album, il sito è www.theourdream.it, ovviamente fate i bravi e non fate dispetti grazie a tutti per l'aiuto
 
Quello che dici tu, quindi quello di riportare con smartimage o windows le immagini nella rotazione giusta non posso farlo perchè sul sito è l'utente che caricherà le foto e non facendo questo problema su tutte le immagini, non posso dire a smartimage di prendere ogni foto e di girarla di tot gradi perchè così facendo anche quelle dritte me le capovolgerebbe.
Può essere un problema del server che posso far risolvere al provider oppure secondo voi è un problema relativo alle immagini ed al codice e me la devo sbrigare da solo?
Mi sembra strano che io ho delle foto normali e mettendole sul sito queste si ruotano, ma che scherziamo? Mica uno può diventar matto per una stupidagine del genere, perchè mi si girano non lo riesco a capire.

Prima pensavo che potesse essere un problema di risoluzione e provando mi sono accorto che alcune foto il php mi scambiava il width con l'height. Ho risolto questo problema con una condizione if($height<$width) allora $width=$height e $height=$width, questo perchè con getimagesize il valore di width che ho nel pc il php me lo mette nell'height, sempre non a tutte. Risolto questo problema la foto mi resta comunque girata. boh... sono proprio confuso.
 
Niente, sempre più confuso, è arrivato il momento di farti degli esempi perchè ora davvero sto perdendo la pazienza:

Io ho due foto, la prima:
Width e Height: 960x1280.
Quando la do in pasto al php, questa risoluzione si inverte e diventa:
1280x960, ovviamente sbagliata e si ruota.
Seconda immagine:
Width e Height: 1320x747.
Questa quando la do in pasto al php mi resta uguale e giusta e infatti non si ruota.

La condizione che utilizzo è:
if($height<$width) {
rotate(-90); per farla girare a destra e funziona con la prima foto perchè anche se la foto è 960x1280, il php mi scambia le due risoluzioni e giustamente la condizione diventa vera, anche se in realtà non dovrebbe esserlo, però la foto poi ruotandola me la pubblica giusta, 960x1280 perchè io come resize gli do le variabili inverse, ma il problema ad esempio è nella seconda foto che, la risoluzione è uguale sia su pc che in php, ma essendo appunto 1320x747 lui giustamente me la ruota comunque perchè anche con questa la condizione è vera, height<width che però è giusta visto che il php non me le inverte.
La soluzione è non utilizzare ad esempio la prima foto, ma io ne ho due che hanno lo stesso problema della prima e non vorrei che anche rinunciando alle due foto che creano problemi in futuro gli utenti non carichino foto che il php gli inverte la risoluzione.
La domanda è: perchè il php mi scambia le risoluzioni?
Aiutatemi per favore grazie!!!!
 
ciao
ripartiamo da zero, da quello che ho capito ti possono caricare le foto come dall'immagine che ti allego
FOTO 1: è caricata giusta quondi non va ne ruotata ne invertite le dimensioni
FOTO 2: è caricata giusta quindi non va ruotata ma bisognerebbe invertire le dimensioni
FOTO 3: qui nasce il problema getsize ti riporta i dati come da FOTO 1, quindi come fai a capire se deve essere ruotata o no?
detto questo se la funzione exif_read_data non risce a funzionare credo che l'unica soluzione che ti rimanga sia
foto 1: la carichi così come è
foto 2: prima inverti le dimensioni (non ruoti) e poi la carichi
foto 3: la carichi come la foto 1, poi verifichi la download su tuo pc, la raddrizzi e la ricarichi manualmente (analogo per la tumb


immagini.jpg

poi provo a chiedere ad altri mod
 
Allora ho delle certezze, delle novità.
Il problema me lo creano le foto scattate con iPhone, ne ho una che il php mi inverte le risoluzioni ed una che invece non le inverte.
Lo stesso problema me lo da sul sito webresize.com, se carico la foto che il php mi inverte le risoluzioni, stessa cosa la fa su questo sito, quindi è un problema di foto di iPhone.
Secondo voi, come potrei risolvere il problema?
Pensavo a leggere la stringa exif e controllare che se contiene iPhone allora ruota, ma non posso perchè ad esempio l'altra foto che è sempre di iPhone non me la gira.
Io leggo le info exif in questo modo perchè non funziona la funzione exif_read_data();

list($width,$height)=getimagesize($varfile,$info);
foreach($info as $id=>$val) {
echo $val."<br /><br />";
}
non conosco altro metodo migliore, questo per lo meno mi fa leggere la stringa anche se incasinata e tutta attaccata, ma va bene lo stesso.

Attendo vostre risposte.
Grazie
 
Si, ma apparte che è un casino di giri, e poi credo che non cambi molto perchè il problema è quello che dici tu? OK che la risoluzione potrebbe essere 960x1280 o viceversa, ma come faccio a capire se la foto deve essere ruotata o meno? Sul PC io prove non dovrei farne perchè è un'operazione che l'utente non dovrà mai fare quando deve pubblicare una foto, e poi ho già fatto tutte le prove del caso... ma niente.
Bisognerebbe credo poter leggere la direttiva orientation e in base al valore ruotarla o meno, ma senza exif_read_data non so come si possa fare.
 
In sostanza, io so che le due risoluzioni non si equivalgono in quanto sul pc ho verificato ed è diversa dal php, ma un utente che mi carica la foto che ne sa che prima di pubblicarla deve ruotarla? ed anche se la ruota, il php me la gira comunque perchè non posso sapere quando farla ruotare o meno..
Io voglio capire solo il perchè il php mi inverte le risoluzioni solo in alcune foto e come impedirglielo di fare
 
ciao
ho fatto una ricerca su exif_read_data anche su altri forum e dappertutto ho trovato "lamentele" che non funziona, forse bisognerebbe scrivere a php net
 
Ciao Borgo Italia,
Ho aperto la discussione in un altro forum ed un utente che mi ha risposto mi ha fatto notare una cosa a cui non avevo pensato e che potrebbe essere proprio il problema visto che questo me lo da solo su due foto precise.

Questo utente dice che probabilmente la foto è stata scattata con iPhone in verticale ma il giroscopio o l'accelerometro per qualche motivo è rimasto in orizzontale e per cui ha memorizzato la risoluzione in orizzontale con la foto in verticale.
Credo che tecnicamente la cosa potrebbe anche starci, ma in ogni caso il php dovrebbe comunque stamparmi la risoluzione che vedo nelle proprietà dell'immagine su paint.
Il problema non è poi tanto la foto in che posizione si trova, ma capire perché la risoluzione di paint è diversa da quella mostrata dal PHP.
Anche se quello che dice il tizio potrebbe essere giusto, la risoluzione comunque deve restare uguale sia su paint che su PHP, invece sono diverse. Mi piacerebbe capire a questo punto dove il PHP va a prendersi le informazioni di risoluzione visto che in certi casi può scambiare larghezza ed altezza.
 
ciao
il giroscopio o l'accelerometro per qualche motivo è rimasto in orizzontale
era quello che pensavo io quando avevo detto che le informazioni erano falsate.
ora (almeno intuisco) se le informazioni sono false php non capisce e prende quelle che per lui sono preminenti, cioè se h>w e la rotazione è sballata considera h come dimensione orizzontale e w come verticale (php ha le funzioni per le immagini, ma non è a livello di un programma di fotoritocco)
ora se quanto detto sulle informazioni penso che se anche exif_read_data funzionasse, avresti comunque problemi in quanto le exif sarebbero contradittorie.
 
Ok perfetto infatti è quello che pensavo, se le informazioni sono sballate lo saranno in tutte le funzioni.
Morale della favola, quella immagine la ruoto io e per le future devo sperare che un utente non mi carichi una foto con problema simile, visto che non posso prevederlo ed agire di conseguenza.

Però ora mi viene da pensare:
Ok la risoluzione il PHP me la da come orizzontale ma l'orientamento a questo punto potrebbe essersi scambiato anche lui ed allora non posso fare la condizione che se la risoluzione di altezza è minore della larghezza e orientamento è verticale allora scambia solo l'orientamento?
No perché non funziona la funzione però sono curioso di capire quale orientamento mi da il PHP con quella funzione, se 8, 6 o 3, sono questi i valori possibili quindi magari lavorando con quelli forse forse un modo c'è
 
Ops, dimenticavo:

Ieri pomeriggio furbescamente mi sono messo a scattare diverse foto con iPhone e quasi tutte avevano questo problema, quindi vedi che il problema sono le foto scattate con iPhone? Io potrei anche capire da quale telefono proviene una foto, solo che non ci faccio niente perché non tutte le foto me le sballa. Ma possibile che solo io sto avendo questo problema? Eppure sembra un problema comune visto che riguarda scatto con iPhone.
 
Allora facciamo così:
In locale creati un file php con il seguente codice:

<?php
if(ISSET($_POST['carica'])) {
for($i=0; $i<count($_FILES['foto']); $i++) {
list($width,$height,$type,$attr)=getimagesize($_FILES['foto']['tmp_name'][$i],$info);
echo $_FILES['foto']['name'][$i]." - ".$attr."<br /><br />";
}
} else {?>
<form action="prova.php" method="post" enctype="multipart/form-data">
<input type="file" name="foto[]" id="foto" multiple="multiple" /><br />
<input type="submit" name="carica" value="Carica" />
</form>
<?php } ?>

Ora prendi la foto che ti allego, questa è stata scattata con iPhone ed ha il problema di cui stiamo parlando.
 

Allegati

  • File 23-07-16, 17 07 56.jpeg
    File 23-07-16, 17 07 56.jpeg
    817 KB · Visite: 650

Discussioni simili