Jump to content

Image produit en .PNG (Topic de recherche)


Recommended Posts

Bonjour,

Cela fait deux semaines que je cherche à avoir une image .PNG comme image de produit quand j'upload une image en .PNG. Tous les topics sur le forum (Anglais/Francais/Espagnol) traitant approximativement du sujet ne fonctionne pas pour le version de Prestashop que j'utilise : 1.3.6.

A un moment, il faut arrêter de chercher seul comme un abruti et montrer TOUT ce que j'ai pu faire, comprendre, trouvé et avancé ENSEMBLE.

Voici les différents éléments qui me semble intéressant :

images.inc.php :

function cacheImage($image, $cacheImage, $size, $imageType = 'jpg')
{
   if (file_exists($image))
   {
       if (!file_exists(_PS_TMP_IMG_DIR_.$cacheImage))
       {
           $imageGd = ($imageType == 'gif' ? imagecreatefromgif($image) : imagecreatefromjpeg($image));



Directement on constate que le type d'image par défaut est 'jpg' puis on : si l'image est un 'gif' alors il crée un image 'gif' sinon une image jpg. A noter que même en uploadant une image .gif elle se retrouve converti en jpg. Le problème ne vient donc pas nécessairement de là mais c'est peut être un maillon de la chaine.

function imageResize($sourceFile, $destFile, $destWidth = NULL, $destHeight = NULL, $fileType = 'jpg')


function    imageCut($srcFile, $destFile, $destWidth = NULL, $destHeight = NULL, $fileType = 'jpg', $destX = 0, $destY = 0)



Même constat que pour la fonction cacheImage.

function    createSrcImage($type, $filename)
{
   switch ($type)
   {
       case 1:
           return imagecreatefromgif($filename);
           break;
       case 3:
           return imagecreatefrompng($filename);
           break;
       case 2:
       default:
           return imagecreatefromjpeg($filename);
           break;
   }
}



En revanche ici, on constate bien qu'en cas d'une image PNG, il y a bien une image créé en PNG. What the fuck ? Passons...

function returnDestImage($type, $ressource, $filename)
{
   $flag = false;
   switch ($type)
   {
       case 'gif':
           $flag = imagegif($ressource, $filename);
           break;
       case 'png':
           $flag = imagepng($ressource, $filename, 7);
           break;
       case 'jpeg':
       default:
           $flag = imagejpeg($ressource, $filename, 90);



On constate ici qu'il y a même une compression du fichier différente selon le type d'image...

function deleteImage($id_item, $id_image = NULL)
{
   $path = ($id_image) ? _PS_PROD_IMG_DIR_ : _PS_CAT_IMG_DIR_;
   $table = ($id_image) ? 'product' : 'category';

   if (file_exists(_PS_TMP_IMG_DIR_.$table.'_'.$id_item.'.jpg'))
       unlink(_PS_TMP_IMG_DIR_.$table.'_'.$id_item.'.jpg');

   if ($id_image AND file_exists($path.$id_item.'-'.$id_image.'.jpg'))
       unlink($path.$id_item.'-'.$id_image.'.jpg');
   elseif (!$id_image AND file_exists($path.$id_item.'.jpg'))
       unlink($path.$id_item.'.jpg');
   /* Auto-generated images */
   $imagesTypes = ImageType::getImagesTypes();
   foreach ($imagesTypes AS $k => $imagesType)
       if ($id_image AND file_exists($path.$id_item.'-'.$id_image.'-'.$imagesType['name'].'.jpg'))
           unlink($path.$id_item.'-'.$id_image.'-'.$imagesType['name'].'.jpg');
       elseif (!$id_image AND file_exists($path.$id_item.'-'.$imagesType['name'].'.jpg'))
           unlink($path.$id_item.'-'.$imagesType['name'].'.jpg');
   /* BO "mini" image */
   if (file_exists(_PS_TMP_IMG_DIR_.$table.'_mini_'.$id_item.'.jpg'))
       unlink(_PS_TMP_IMG_DIR_.$table.'_mini_'.$id_item.'.jpg');
   return true;
}



Et là c'est le bouquet final : C'est sur et certains, Prestashop converti toutes les images en jpg et lors de la suppression d'une image, il s'occupe que du nom du fichier puisque l'extension et ancré dans le code.
Puisque la conversion se fait seule, il y a forcément une ligne (ou plusieurs) de code qui fait la manip.


admin/diplayImage.php :

    header('Content-type: image/jpeg');
   header('Content-Disposition: attachment; filename="'.$_GET['name'].'.jpg"');
   echo file_get_contents(_PS_PROD_PIC_DIR_.$_GET['img']);



D'entrée, on a un "formatage" à l'affichage d'une image 'jpg'.

En gros, voilà ce que j'ai analysé. J'ai modifié les extensions jpg en png mais rien n'y fait.

A noter aussi c'est bon à savoir mais pas forcément la cause du problème :

.htaccess :

RewriteRule ^([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /presta/img/p/$1-$2$3.jpg [QSA,L,E]
RewriteRule ^([0-9]+)\-([0-9]+)/([_a-zA-Z0-9-]*)\.jpg$ /presta/img/p/$1-$2.jpg [QSA,L,E]
RewriteRule ^([0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /presta/img/c/$1$2.jpg [QSA,L,E]



Le format JPG est donc encore imposé. Ce que je ne comprend pas c'est quand je modifie comme ceci :

RewriteRule ^([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.png$ /presta/img/p/$1-$2$3.jpg [QSA,L,E]
RewriteRule ^([0-9]+)\-([0-9]+)/([_a-zA-Z0-9-]*)\.png$ /presta/img/p/$1-$2.jpg [QSA,L,E]
RewriteRule ^([0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.png$ /presta/img/c/$1$2.jpg [QSA,L,E]



Je n'ai aucun changement en .png dans la réécriture de l'URL de mes images.

Voilà où j'en suis, auriez vous des pistes à m'indiquer afin que j'explore un peu plus ou de l'aide serait la bienvenue également.

Merci par avance.

Link to comment
Share on other sites

Voici comment se comporte le fichier uploadé :

Je passe dans la fonction checkImage
Je passe dans la fonction isPicture, à la sortie le type renvoyé est image/png (pour une image en png bien sur, parce que j'ai modifié le Filetype dans les attributs de la fonction).
Je passe dans la fonction imageResize, il me donne un filetype = 3 qui correspond à PNG dans le switch case du createSrcImage
Je passe dans la fonction createSrcImage, imagecreatepng OK
Je passe dans la fonction returnDestImage et là mon filename => 1-96.jpg

So, What the fuck is going on ?? !

Le problème arrive entre createSrcImage et returnDestImage.

Link to comment
Share on other sites

De toute façon il y a forcément une ligne dans le code qui est responsable de cette auto conversion. Apparemment peu de personne semble s'y intéresser. Je comprend pourquoi certains ose ensuite facturer des modules qui coûtant une fortune.

Allez c'est repartie pour une après-midi de recherche dans le code.

Link to comment
Share on other sites

  • 1 month later...
Après 3 semaines de recherche j'ai enfin trouvé.

Il ne me reste plus qu'à ajuster les réglages pour que jpg et png puisse collaborer sur le site et je proposerai un module =)


Salut,

Je cherche justement la solution et je viens de tomber sur ton message :)

Pour ma part en urgence c'est "simplement" l'image des catégories qui s'affiche en jpeg alors que j'ai besoin de mon png transparent :/

Quelles lignes sont à changer dans le fichier Image.Inc ?

Merci !
Link to comment
Share on other sites

Après 3 semaines de recherche j'ai enfin trouvé.

Il ne me reste plus qu'à ajuster les réglages pour que jpg et png puisse collaborer sur le site et je proposerai un module =)


Salut,

Je cherche justement la solution et je viens de tomber sur ton message :)

Pour ma part en urgence c'est "simplement" l'image des catégories qui s'affiche en jpeg alors que j'ai besoin de mon png transparent :/

Quelles lignes sont à changer dans le fichier Image.Inc ?

Merci !


C'est bien plus que le fichier image.inc à modifier. Je ne peux pas t'en dire plus pour le moment.
Link to comment
Share on other sites

  • 2 weeks later...

Bonjour Stephan13,
Tes tests sont-ils concluants? Je cherche moi aussi une solution à ce problème et effectivement plusieurs fichiers sont impliqués...à la seule différence que je n'ai quand même pas réussi à générer des png transparents!
Merci d'avance pour ton aide.

Link to comment
Share on other sites

  • 3 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...