PrestaShop, come risolvere il problema del resize delle immagini

Articolo super mega veloce su come risolvere il problema del resize delle immagini in PrestaShop. Infatti facendo l’upload di un immagine qualunque, essa veniva trasformata in un’immagine quadrata aggiungendo delle bruttissime bande bianche superiori o laterali come questa qui sotto:

prestashop bande bianche

Dopo aver girato in lungo e in largo il forum ufficiale di Prestashop senza trovare alcuna soluzione degna del nome me la sono creato da solo la soluzione.

Per eliminare il problema e ottenere quindi un’immagine come quella qui sotto, basterà qualche piccola modifica al file image.in.php che si trova nella root di PrestaShop.

prestashop senza bande bianche

Ecco qui il mio file image.inc.php (compatibile con la versione 1.3.6)

UPDATE:
Un ringraziamento a  Taylor Johnson che ci segnala il nuovo file image.inc.php per Prestashop 1.4.4.1 e Prestashop 1.4.5.1

Scritto da in Senza categoria



32 commenti to “PrestaShop, come risolvere il problema del resize delle immagini”

  1. Amir ha detto:

    Hi, Thanks for your work.
    Is your file working with Prestashop 1.4?

  2. zanna86 ha detto:

    I don’t know…I’ve modified the image.php.inc of PrestaShop 1.3.6.

    UPDATE: I’ve download PrestaShop 4 and the image.php.inc is a little bit different from the 1.3.6 version, but the functions and parameters are the same…then it should work correctly in 1.4 too.

    The faster way to discover is to try! Make a backup of original image.inc.php of your 1.4 and then try to use my file!

    If you want then feedback me if it works or not!

  3. Stephane ha detto:

    Hi Zanna86,

    I just upload on my website your image.inc.php but it doesn’t match with my problem, maybe you can help me :

    I would like to upload PNG photo and keep this format but Prestashop 1.3.6 convert my PNG file to a JPG file.

    I searched a lot in my image.inc.php, tested some stuffs but i didn’t solve my problem.

    Have you got a idea about it ?

    Thank you.

  4. zanna86 ha detto:

    Hi Stephane,
    yes, PrestaShop converts all image into jpg image. It force the jpg output.

    If you want to preserve your file type you must modify the line 10 and add few line after line 36. In these days I’haven’t the time to do these changes…

    But…why do you want to preserve your png file extension?What’s the advantages?Trasparency?

  5. Stephane ha detto:

    I need to have my photo product on a PNG File because i dd a script to . So reate declination product.

  6. Stephane ha detto:

    I change my line 10 :

    function cacheImage($image, $cacheImage, $size, $imageType = ‘png’)

    And after the line 36 i did this :

    if ($imageType == ‘gif’)
    imagegif($newImage, _PS_TMP_IMG_DIR_.$cacheImage);
    elseif ($imageType == ‘png’)
    imagepng($newImage, _PS_TMP_IMG_DIR_.$cacheImage, 0);
    else
    imagejpeg($newImage, _PS_TMP_IMG_DIR_.$cacheImage, 86);

    but it doesn’t work !

  7. zanna86 ha detto:

    Uhm…sorry….I need some time to debug it..and now I havent’t time!

    Maybe in the next week.

    The problem is that I don’t know how PrestaShop work…I’m a newbie with PrestaShop, but I know the PHP! 😉

  8. Stephane ha detto:

    Maybe you’re more time this week ?

    I write something about my problem here : http://www.prestashop.com/forums/viewthread/91889/developpement/image_produit_en__dot_png_topic_de_recherche

    In French but just the code is very important to resolve the issue.

  9. zanna86 ha detto:

    Excuse me Stephane but I’m on exam in February…I tought to be free from this week but I’m very busy on electronic engineer…

    You must debug the code. You can print on display the variables with echo or print_f and exit(); form funcion. Step by step you will discover the problem and fix it!

    The problem is that I and you doesn’t know how the core of PrestaShop work…then the debug may involve some php files and much much time only to understand how it works!

  10. Luca ha detto:

    avrei bisogno di applicare la cosa solo alle immagini “large” e per le altre lasciare il vecchio metodo. sai percaso che controllo posso mettere nella funzione imageResize() per far sta cosa? non ho ancora provato, ma prima vedo se già potresti saperlo.. (così a freddo mi viene di fare un controllo sul contenuto della stringa in $sourceFile, magari con un match_preg, o una roba del genere)

    grazie

  11. zanna86 ha detto:

    Ciao Luca, volendo potresti più semplicemente controllare $destWidth e $destHeight!

    Ciao

  12. Luca ha detto:

    giusto. grazie, fatto.

    (è solo una mia impressione ho le immagini sgranano un attimino applicando questo tuo metodo?)

  13. zanna86 ha detto:

    Dipende tutto dalle GDI del PHP. Comunque puoi migliorare la qualità agendo sul parametro della funzione imagejpeg.

    imagejpg (resource $image , string $filename , int $quality)

    Ciao

  14. Luca ha detto:

    ok, ti ringrazio ancora

  15. Gabriele ha detto:

    Scusa, so che ti hanno già fatto la domanda ma non riesco ad andare avanti, pur dovendolo fare.
    Ho applicato lo script (perfetto) ma come detto da Luca le immagini dopo il cambio di script escono un po’ sgranate, dove trovo questo?

    imagejpg (resource $image , string $filename , int $quality)

    che hai consogliato di modificare a luca? e come dovrei modificarlo per mantenere la qualità delle immagini?

    Grazie in anticipo

  16. zanna86 ha detto:

    Ciao Gabriele, alla riga 250 trovi l’istruzione imagejpg. Puoi provare a impostare la qualità a 100.

    Purtoppo le librerie grafiche del PHP non sono come quelle di Photoshop….

  17. Gabriele ha detto:

    Spostata, ma continua a vedersi sgranata. Cmq grazie della dritta.

    Mi viene un altra domanda, ma lo script originale usa anche lui la stessa libreria? perchè se si, allora magari vedo(magari anche con il tuo aiuto) di trovare una soluzione interna allo script, se no, può darsi veramente che dipenda dal mio server locale e magari la cosa migliora quando sarò on line.

    Cmq grazie in anticipo per prima e per qualche altro suggerimento che potrai darmi!

  18. zanna86 ha detto:

    Le cose non dipendono dal tuo server locale.Dipende dalla verione delle librerie GDI del PHP. Io ho su le ultime ma anche a me si sgrana un pò la foto.

    E’ passato un pò di tempo e non mi ricordo con precisione che metodo utilizzava. Mi pare che partisse da un immagine bianca quadrata e poi gli incollasse sopra l’immagine ridimensionata. Dovrei guardare…ora sono un pò di fretta, magari domani!

    Ciao

  19. zanna86 ha detto:

    Prova a sostituire alla riga 169 imagecopyresized con imagecopyresampled che usa un algoritmo bi-cubico.

    Oppure lasciare perdere le GD di PHP e usare ImageMagic (http://php.net/manual/en/book.imagick.php)

    Ciao

  20. Taylor Johnson ha detto:

    For a better quality image, replace ‘imagecopyresized’ with ‘imagecopyresampled’. To make this code work in Prestashop 1.4, you also need to remove the closing PHP tag ‘?>’ from the end of the file.

  21. Evil ha detto:

    ciao
    ho provato ad applicare il file modificato che gentilmente hai messo a disposizione,purtroppo i bordini bianchi restano sempre, sto usando la versione di prestasho 1.4 non è che avresti qualche suggerimento da darmi per provare a risolvere ?
    Grazie ancora a presto

  22. zanna86 ha detto:

    Ciao Evil, la versione 1.4 non l’ho più provata perchè il sito che stavo facendo con Prestashop è stato interrotto.

    Taylor Johnson, qualche commento più sopra, consiglia di togliere la chiusura del tag PHP alla fine del file…

    A quanto vedo nei commenti, ad altri su Prestashop 1.4 ha funzionato…

    Ciao

  23. Taylor Johnson ha detto:

    I suggest you use Google translate to translate this text if you don’t understand English.

    Evil, what version of Prestashop 1.4 are you using? You will most likely have to alter images.inc.php for each version. I have linked to a file which has 2 versions. One for 1.4.4.1 and the other for 1.4.5.1.

    Place the edited file in the prestashop base directory. You will then need to log in to the Prestashop administration area and go to Preferences > Images and click ‘Regenerate thumbnails’.

    http://www.mediafire.com/?y14gs3pmctphoo0

  24. zanna86 ha detto:

    Thanks Taylor Johnson. I will update the post with your image.inc.php!

  25. Fede ha detto:

    Salve Stefano e complimenti per l’utile post. Per caso, conosci un modo per dare un nome personalizzato alle immagini? Per esempio, ho un prodotto che si chiama X e l’immagine si chiama, mettiamo, 3-10.jpg. Se attivo la riscrittura delle URL l’immagine si chiamerà X.jpg. Però io vorrei che l’immagine mantenesse il suo nome originario (per esempio x-hi-res.jpg). Come posso fare? Grazie mille

  26. zanna86 ha detto:

    Ciao Fede, purtroppo ho utilizzato Prestashop solo per testare un nuovo Ecommerce e non ho approfondito così tanto il suo motore interno.

    Sicuramente da qualche parte, nel motore che riscrive le URL c’è una ragola che utilizza il titolo del prodotto. Dovresti individuarla e fargli utilizzare il nome del file jpg…

    Mi dispiace, ma di più non saprei aiutarti, non ho approfondito la riscrittura delle URL di prestashop…

    Posso solo consigliarti di provare sul forum, inglese o italiano, di Prestashop.

    Ciao

  27. Stefano ha detto:

    Grazie utilissima la soluzione mi hai fatto risparmiare parecchio tempo 😉

  28. Luca ha detto:

    Ciao, fantastica questa soluzione, era proprio quello che cercavo! Però ho controllato l’ultimo file inserito, ma no non va bene per la mia versione di prestashop, che è la 1.4.8.2
    Sai per caso indicarmi quali modifiche dovrei fare o hai il file anche per questa versione?

    Grazie e buon lavoro!

  29. zanna86 ha detto:

    Ciao Luca, mi dispiace ma non ho più seguito il problema…forse spulciando nei file presenti in questo articolo puoi trovare da te la soluzione…

    Ciao

  30. Luca ha detto:

    Ciao, nessun problema, ho testato il file della versione 1.4.5.1 e non ho riscontrato problemi, funziona perfettamente!

    Grazie ancora dell’aiuto!

  31. Daniele ha detto:

    Ma la modifica vale anche per prestashop 1.5? Qualcuno ha il file aggiornato?

  32. zanna86 ha detto:

    Ciao Daniele,
    no, non penso che sia compatibile con la versione 1.5. Purtroppo non ho più seguito il progetto… Vediamo se qualcun’altro risponde.

    Ciao.:!

Lascia un commento