hdonoblepsias Δημοσ. 17 Νοεμβρίου 2019 Δημοσ. 17 Νοεμβρίου 2019 (επεξεργασμένο) Καλησπέρα. Προσπαθώ να φτιάξω με ajax upload αρκετών φωτογραφιών και βημα βημα με ψάξιμο το έχω καταφέρει. Θέλω όμως όταν ανεβαίνουν οι φωτογραφίες να γίνονται και resize σε διαστάσεις με μέγιστο πλάτος 800px ή ύψος 600px. με το παρακάτω κώδικα το έχω καταφέρει. Και ανεβαίνουν, και γίνονται resize κλπ. Αν ανεβάσω μία φωτογραφία, δουλεύει ρολόι. Αν ανεβάσω όμως πάνω απο μία φωτογραφία (πχ 5), η πρώτη ανεβαίνει εμφανίζοντας μόνο ένα πολύ μικρό κομμάτι του φόντου, και οι άλλες μια χαρά. Κάτι πρέπει να παίζει με το πρώτο loop αλλά δεν μπορώ να καταλάβω. Δειτε στο spoiler περισσότερα τι εννοώ και τον κώδικα παρακάτω. Δηλαδή αν θέλω να ανεβάσω μαζί αυτες τις φωτος Θα πάρω κάτι τέτοιο οπου στη πρώτη φώτο εμφανίζεται ένα μόνο κομματάκι απο την πάνω αριστερα φωτογραφία O κωδικάς μου στο συγκεκριμένο σημείο είναι ο παρακάτω (σε μερικά σημεία που έχω mt_rand κλπ είναι για να δημιουργώ τυχαίο prefix στο filename) if($_FILES["files"]["name"] != '') { $config["upload_path"] = './assets/images/'; $config["allowed_types"] = 'gif|jpg|png'; $this->load->library('upload', $config); $this->upload->initialize($config); for($count = 0; $count<count($_FILES["files"]["name"]); $count++) { $rand = mt_rand(100,999); $time = time(); $final_filename = $rand.'-'.$time.'-'; $_FILES["file"]["name"] = $final_filename.$_FILES["files"]["name"][$count]; $_FILES["file"]["type"] = $_FILES["files"]["type"][$count]; $_FILES["file"]["tmp_name"] = $_FILES["files"]["tmp_name"][$count]; $_FILES["file"]["error"] = $_FILES["files"]["error"][$count]; $_FILES["file"]["size"] = $_FILES["files"]["size"][$count]; if($this->upload->do_upload('file')) { $data = $this->upload->data(); $config['image_library'] = 'gd2'; $config['source_image'] = './assets/images/'.$_FILES["file"]["name"]; $config['maintain_ratio'] = TRUE; $config['width'] = 800; $config['height'] = 600; $config['new_image'] = './assets/images/'.$_FILES["file"]["name"]; $this->load->library('image_lib', $config); $this->image_lib->resize(); } } Αν σβήσω τις γραμμές $config['maintain_ratio'] = TRUE; $config['width'] = 800; $config['height'] = 600; ανεβαίνουν μια χαρά. Θέλω να γίνονται resize ομως Επεξ/σία 17 Νοεμβρίου 2019 από hdonoblepsias
k33theod Δημοσ. 17 Νοεμβρίου 2019 Δημοσ. 17 Νοεμβρίου 2019 (επεξεργασμένο) Κάτι "λάθος" που βλέπω, δεν νομίζω όμως να δημιουργεί το πρόβλημα είναι: Όταν έχεις maintain?ratio true πρέπει να αλλάζεις μία διάσταση και όχι και τις δύο η δεύτερη υπολογίζεται από το ratio Επεξ/σία 17 Νοεμβρίου 2019 από k33theod
hdonoblepsias Δημοσ. 18 Νοεμβρίου 2019 Μέλος Δημοσ. 18 Νοεμβρίου 2019 (επεξεργασμένο) Δεν νομίζω να είναι λάθος αυτό. Με αυτό το τρόπο δεν θα ξεπεραστεί το όριο σε καμία διάσταση. Αν άφηνα για παράδειγμα το limit μόνο του width στο 800 και έσβηνα το height, τότε μια εικόνα που μπορεί να ανέβαζε κάποιος 800χ2000 θα ανέβαινε κανονικά και θα ήταν μια μεγάλη εικόνα. Με ta 2 όμως κάνει resize την φωτογραφία στη μεγαλύτερη διάσταση. Είτε width ειτε height. Επεξ/σία 18 Νοεμβρίου 2019 από hdonoblepsias
k33theod Δημοσ. 18 Νοεμβρίου 2019 Δημοσ. 18 Νοεμβρίου 2019 (επεξεργασμένο) 10 ώρες πριν, hdonoblepsias είπε Δεν νομίζω να είναι λάθος αυτό. Με αυτό το τρόπο δεν θα ξεπεραστεί το όριο σε καμία διάσταση. Αν άφηνα για παράδειγμα το limit μόνο του width στο 800 και έσβηνα το height, τότε μια εικόνα που μπορεί να ανέβαζε κάποιος 800χ2000 θα ανέβαινε κανονικά και θα ήταν μια μεγάλη εικόνα. Με ta 2 όμως κάνει resize την φωτογραφία στη μεγαλύτερη διάσταση. Είτε width ειτε height. Kοίτα λίγο έχεις μια εικόνα 1600χ100 την κάνεις resize ώστε το width να γίνει 800 στο μισό δηλαδή. Πόσο γίνεται το height; Ακολουθεί το ratio και γίνεται 50 σωστά; H εικόνα σου τώρα είναι 800χ50 same ratio as 1600x100 Όταν ξανακάνω resize την εικόνα ώστε το height να πάει στα 600 αυξάνω το height x12. To height γίνεται 600 και το width ακολουθώντας το ratio 800x12 = 9600. Χωρίς να ξέρω πως ακριβώς ακριβώς λειτουργεί η βιβλιοθήκη σου, νομίζω ότι έχω δίκαιο😄 Ίσως αυτό είναι τελικά το πρόβλημα. Ένας τρόπος για να πετύχεις resize ώστε να χωράει στο 800χ600 θα μπορούσε να είναι if ratio>800/600 resize with else resize height Επεξ/σία 18 Νοεμβρίου 2019 από k33theod
hdonoblepsias Δημοσ. 18 Νοεμβρίου 2019 Μέλος Δημοσ. 18 Νοεμβρίου 2019 5 ώρες πριν, k33theod είπε Kοίτα λίγο έχεις μια εικόνα 1600χ100 την κάνεις resize ώστε το width να γίνει 800 στο μισό δηλαδή. Πόσο γίνεται το height; Ακολουθεί το ratio και γίνεται 50 σωστά; H εικόνα σου τώρα είναι 800χ50 same ratio as 1600x100 Όταν ξανακάνω resize την εικόνα ώστε το height να πάει στα 600 αυξάνω το height x12. To height γίνεται 600 και το width ακολουθώντας το ratio 800x12 = 9600. Χωρίς να ξέρω πως ακριβώς ακριβώς λειτουργεί η βιβλιοθήκη σου, νομίζω ότι έχω δίκαιο😄 Ίσως αυτό είναι τελικά το πρόβλημα. Ένας τρόπος για να πετύχεις resize ώστε να χωράει στο 800χ600 θα μπορούσε να είναι if ratio>800/600 resize with else resize height Μπορεί και να έχεις δίκιο. θα το κοιτάξω. Αυτόπου με καίει τώρα όμως είναι τι συμβαίνει με την πρώτη φώτο?
k33theod Δημοσ. 19 Νοεμβρίου 2019 Δημοσ. 19 Νοεμβρίου 2019 Σβήσε ένα από τα 2 resize και ξαναδοκίμασε.
kosnik Δημοσ. 19 Νοεμβρίου 2019 Δημοσ. 19 Νοεμβρίου 2019 Στις 17/11/2019 στις 9:18 ΜΜ, hdonoblepsias είπε $config['maintain_ratio'] = TRUE; $config['width'] = 800; $config['height'] = 600; επίσης αυτά δεν υπάρχει κανένας λόγος να είναι μέσα στη λούπα. Εκεί κράτα μόνο ότι αλλάζει δυναμικά για κάθε εικόνα.
hdonoblepsias Δημοσ. 21 Νοεμβρίου 2019 Μέλος Δημοσ. 21 Νοεμβρίου 2019 Στις 19/11/2019 στις 5:34 ΜΜ, kosnik είπε επίσης αυτά δεν υπάρχει κανένας λόγος να είναι μέσα στη λούπα. Εκεί κράτα μόνο ότι αλλάζει δυναμικά για κάθε εικόνα. Καλησπέρα. Και πως θα γίνει το resize στην κάθε εικόνα που ανεβαίνει?
kosnik Δημοσ. 22 Νοεμβρίου 2019 Δημοσ. 22 Νοεμβρίου 2019 Στις 17/11/2019 στις 9:18 ΜΜ, hdonoblepsias είπε for($count = 0; $count<count($_FILES["files"]["name"]); $count++) Αν βάλεις τα config items που δεν αλλάζουν (μένουν τα ίδια) σε κάθε iteration πάνω απο το for loop, υπάρχει κάποιο πρόβλημα? Αφού θα έχουν τεθεί. Εσύ σε καθε iteration θες να ορίζεις καθε φορα αυτα που αλλάζουν, δλδ τα $config['source_image'] & $config['new_image'] . Όλα τα άλλα ιδια δεν είναι καθ εφορα? Γτ να τα θετεις ξανα και ξανα σε καθε λουπα.
hdonoblepsias Δημοσ. 25 Νοεμβρίου 2019 Μέλος Δημοσ. 25 Νοεμβρίου 2019 Καλησπέρα. Ξαναασχολήθηκα με το θέμα μου το ΣΚ που είχα λίγο χρόνο... Στις 19/11/2019 στις 1:43 ΜΜ, k33theod είπε Σβήσε ένα από τα 2 resize και ξαναδοκίμασε. Δυστυχώς δεν δούλεψε. Στις 22/11/2019 στις 10:21 ΠΜ, kosnik είπε Αν βάλεις τα config items που δεν αλλάζουν (μένουν τα ίδια) σε κάθε iteration πάνω απο το for loop, υπάρχει κάποιο πρόβλημα? Αφού θα έχουν τεθεί. Εσύ σε καθε iteration θες να ορίζεις καθε φορα αυτα που αλλάζουν, δλδ τα $config['source_image'] & $config['new_image'] . Όλα τα άλλα ιδια δεν είναι καθ εφορα? Γτ να τα θετεις ξανα και ξανα σε καθε λουπα. Τώρα ξεκόλλησε το μυαλό μου και κατάλαβα τι εννοείς. Το έκανα. Σαφέστατα πιο βελτιστοποιημένος αυτός ο τρόπος αλλά δυστυχώς δεν έλυσε το πρόβλημα. Μία παρατήρηση που έκανα όμως είναι οτι το πρόβλημα της πρώτης εικόνας που περιγράφω παραπάνω, εμφανίζεται μερικές φορές όπως γράφω ποιο πάνω. Δηλαδή στο μέγεθος της εικόνας ζουμάρεται ένα πολύ μικρό κομμάτι. Τώρα παρατήρησα όμως οτι μερικές φορές όλη η εικόνα είναι μάυρη και σε ένα πολύ μικρό κομμάτι επάνω αριστερα, εμφανίζεται όλη η εικόνα σε σμίκρινση. Παράδειγμα Επίσης παρατήρησα και άλλο πρόβλημα. Χωρίς να έχω θέσει κάποιο όριο, παρατήρησα οτι μεγάλες εικόνες (πχ 2mb) δεν τις ανεβάζει. Δεν πετάει κάποιο σφάλμα, απλά δεν τις ανεβάζει. Ούτε μία μία ούτε όλες μαζί. Κοντεύω να αρρωστήσω με αυτό το θέμα Υ.Γ. Αυτό που θέλω να κάνω είναι να μπορεί ο κάθε χρήστης μου να ανεβάζει φωτογραφίες χωρίς να του έχω κάποιο όριο. Μετά το site μου να αναλαμβάνει να τις κάνει resize για να είναι και γρήγορο το site αλλά και για θέμα χώρου. Τώρα όμως ούτε μεγάλες εικόνες ανεβαίνουν, ούτε σωστά γίνεται το resize όταν ανεβαίνουν 2 και πάνω φωτογραφίες μαζί. Μία λύση που σκέφτηκα (δεν έχω ψάξει ακόμα αλλά φαντάζομαι πως γίνεται), είναι κατα την επιλογή των φώτο να γίνεται ένας έλεγχος για μέγεθος και διαστάσεις και αν υπερβαίνουν το όριο που θα ορίσω, να επιστρέφει alert στο χρήστη. Απλά δεν θα ήθελα για λόγω UX να υποβάλλω τον χρήστη/επισκέπτη/πελάτη σε αυτή την διαδικασία. Δηλαδή να πρέπει να κάνει αυτός το resize.
k33theod Δημοσ. 25 Νοεμβρίου 2019 Δημοσ. 25 Νοεμβρίου 2019 Το επιτρεπόμενο μέγεθος upload είναι μάλλον λόγω ρύθμισης της php upload_max_filesize = 2M είναι το default
kosnik Δημοσ. 26 Νοεμβρίου 2019 Δημοσ. 26 Νοεμβρίου 2019 14 ώρες πριν, hdonoblepsias είπε Σαφέστατα πιο βελτιστοποιημένος αυτός ο τρόπος αλλά δυστυχώς δεν έλυσε το πρόβλημα. Ναι ηταν γενικο σχολιο δομης κωδικα. Για το upload limit οτι σου είπε ο φίλος απο πανω (συν το post_max_filesize). Μην αφηνεις το χρήστη να ανεβάζει οτι μεγεθος θελει. Όρισε ενα max size σε mb και βάλε ένα note στη φορμα πως το μεγιστο επιτρεπτο μεγεθος ειναι τόσο. Βάλε ενα μεγαλο όριο αν θες οκ, αλλά βάλε κάτι. 10mb για εικονα ειναι οκ γενικα. Για το αλλο προβλημα που εχεις με την πρωτη εικονα που δεν φαινεται σωστα χωρις debugging δυσκολα να σου πει καποιος τι φταίει
elpenor Δημοσ. 26 Νοεμβρίου 2019 Δημοσ. 26 Νοεμβρίου 2019 Αν χρησιμοποιήσεις κάτι τέτοιο για το upload;
hdonoblepsias Δημοσ. 29 Νοεμβρίου 2019 Μέλος Δημοσ. 29 Νοεμβρίου 2019 (επεξεργασμένο) Στις 26/11/2019 στις 12:19 ΜΜ, kosnik είπε Ναι ηταν γενικο σχολιο δομης κωδικα. Για το upload limit οτι σου είπε ο φίλος απο πανω (συν το post_max_filesize). Μην αφηνεις το χρήστη να ανεβάζει οτι μεγεθος θελει. Όρισε ενα max size σε mb και βάλε ένα note στη φορμα πως το μεγιστο επιτρεπτο μεγεθος ειναι τόσο. Βάλε ενα μεγαλο όριο αν θες οκ, αλλά βάλε κάτι. 10mb για εικονα ειναι οκ γενικα. Για το αλλο προβλημα που εχεις με την πρωτη εικονα που δεν φαινεται σωστα χωρις debugging δυσκολα να σου πει καποιος τι φταίει Τελικά έβαλα ένα όριο 300kb ανα φωτογραφία. Οπότε έβγαλα το resize. Τώρα είναι κομπλέ. Κάτι τελευταίο ρε παίδες. Στο κώδικά μου στην λούπα έβαλα πριν το filename της φωτογραφίας κάτι random και μετά κολλάει και το filename της φωτογραφίας. $_FILES["file"]["name"] = $final_filename.$_FILES["files"]["name"][$count]; εγώ ήθελα βασικά 100% random filename. Δηλαδή να μην υπάρχει πουθενά το πρωτότυπο filename της φωτογραφίας. Δοκίμασα κάτι τέτοια που νόμιζα οτι θα έχει αποτέλεσμα, αλλα δεν δούλευε τίποτα. $_FILES["file"]["name"] = $final_filename; ή $_FILES["file"]["name"] = $final_filename[$count]; οπότε το άφησα έτσι. Τώρα παρατηρώ όμως οτί έκανα μ...κια, γιατί αν ανεβάσει κάποιος μία φώτο με ονομασία "οι διακοπές μου.jpg" θα μου ανέβει στο χώρο "οι_διακοπές_μου.jpg" αλλά στην mysql θα ανέβει με τα κενά. Πως μπορώ να κάνω ένα απο τα 2 (προτιμώ το 1 ) Ολο το filename να είναι random πχ $filename = mt_rand(1000,9999).time(); οπότε να βγαίνει ένα "34681575036739.jpg" Οπου κενό, στην βάση να μπαίνει κάτω παύλα. Αλλά τι γίνεται και με άλλους χαρακτήρες αν πχ είναι το filename "my photos !!!!!.jpg"? Επεξ/σία 29 Νοεμβρίου 2019 από hdonoblepsias
kosnik Δημοσ. 29 Νοεμβρίου 2019 Δημοσ. 29 Νοεμβρίου 2019 (επεξεργασμένο) 300kb ειναι μικρο και πολυ δεσμευτικο κατα τη γνωμη μου. Δεν πρεπει να βαζεις το χρηστη να κανει resize πριν ανεβασει (επειδη πολυ πιθανοτατα να παει καποιος να ανεβασει μεγαλυτερη φωτογραφια). Πας να καλύψεις τωρα το οτι δεν μπορεις να κανεις σωστο resize στον server μετατοπιζοντας το προβλημα στον χρηστη. Βάλε ενα λογικο οριο ~2mb, και κανε σωστο resize αν θες. επίσης δεν καταλαβα, το 800/600 που εκανες το εκανες αποκλειστικα για λογους μεγεθους αρχείου ή θες αυτες τις διαστασεις απλά? Για το ονομα οτυ αρχειου, ποιο ειναι το προβλημα, αφου το εγραψες μονος σου, κανε ενα $filename = mt_rand(1000,9999).time(); και αποηθηκευσε το με αυτο. Επεξ/σία 29 Νοεμβρίου 2019 από kosnik
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα