📦 CatalogueIntermédiaire PS 1.6 PS 1.7 PS 8.x

Extraire les photos produits PrestaShop : SQL, cURL et bonnes pratiques

Guide complet pour extraire les images produits PrestaShop via requête SQL et cURL. Méthode professionnelle compatible PrestaShop 1.7 et 8.x.

En bref : Pour extraire les photos produits de PrestaShop, reconstituez les URLs des images via une requête SQL sur la table ps_image (en découpant l'id_image en sous-dossiers), puis téléchargez-les en masse avec cURL ou rsync.

Publié le 21 mars 2026 5 min de lecture Alexandre Carette

Pourquoi extraire les images produits de PrestaShop ?

Plusieurs situations exigent de récupérer en masse les photos originales de votre catalogue PrestaShop : migration vers une autre plateforme, sauvegarde externe, alimentation d'un PIM (Product Information Management) ou synchronisation avec une marketplace.

Le problème, c'est que PrestaShop stocke ses images dans une arborescence éclatée sur le disque. Depuis la version 1.6.1, le nouveau mode de stockage découpe l'identifiant de chaque image en sous-dossiers individuels. L'image 12345.jpg se retrouve ainsi dans /img/p/1/2/3/4/5/12345.jpg. Impossible donc de simplement copier un dossier unique.

Voici la méthode professionnelle en deux étapes : d'abord reconstituer les URLs via SQL, puis télécharger en masse avec cURL.

Comprendre le stockage des images PrestaShop

Ancien format (legacy)

Dans les anciennes versions (avant 1.6.1), toutes les images étaient stockées à plat :


/img/p/12345.jpg
/img/p/12345-home_default.jpg
/img/p/12345-large_default.jpg

Nouveau format (arborescence éclatée)

Depuis PrestaShop 1.6.1, chaque chiffre de l'identifiant devient un sous-dossier :


/img/p/1/2/3/4/5/12345.jpg           → image originale
/img/p/1/2/3/4/5/12345-home_default.jpg  → miniature
/img/p/1/2/3/4/5/12345-large_default.jpg → grande taille

Ce format améliore les performances sur les systèmes de fichiers (évite les dossiers contenant des milliers de fichiers), mais complique l'extraction manuelle.

Vous pouvez vérifier quel mode est actif dans votre back-office sous Préférences > Images > Utiliser le nouveau système de stockage d'images.

Étape 1 : Reconstituer les URLs via SQL

La clé de l'extraction est de reconstruire le chemin complet de chaque image à partir de son id_image en base de données. Voici une requête SQL optimisée à exécuter dans le Gestionnaire SQL du back-office (ou via phpMyAdmin) :


SELECT 
  p.id_product AS id,
  pl.name AS nom_produit,
  im.id_image,
  CONCAT(
    'https://www.votredomaine.fr/img/p/',
    CONCAT_WS('/',
      SUBSTRING(im.id_image, 1, 1),
      CASE WHEN LENGTH(im.id_image) >= 2 THEN SUBSTRING(im.id_image, 2, 1) END,
      CASE WHEN LENGTH(im.id_image) >= 3 THEN SUBSTRING(im.id_image, 3, 1) END,
      CASE WHEN LENGTH(im.id_image) >= 4 THEN SUBSTRING(im.id_image, 4, 1) END,
      CASE WHEN LENGTH(im.id_image) >= 5 THEN SUBSTRING(im.id_image, 5, 1) END,
      CASE WHEN LENGTH(im.id_image) >= 6 THEN SUBSTRING(im.id_image, 6, 1) END
    ),
    '/', im.id_image, '.jpg'
  ) AS url_image
FROM ps_product p
INNER JOIN ps_product_lang pl 
  ON p.id_product = pl.id_product AND pl.id_lang = 1
INNER JOIN ps_image im 
  ON p.id_product = im.id_product
WHERE p.active = 1
ORDER BY p.id_product, im.position;

Note : Remplacez ps_ par votre préfixe de tables si vous l'avez personnalisé lors de l'installation. Adaptez également id_lang = 1 selon votre langue par défaut.

Variante : exporter toutes les déclinaisons de taille

Si vous souhaitez récupérer une taille spécifique (par exemple large_default), modifiez la fin de la concaténation :


-- Remplacer la ligne finale par :
'/', im.id_image, '-large_default.jpg'

Les types d'images disponibles correspondent à ceux configurés dans Préférences > Images : cart_default, small_default, medium_default, home_default, large_default, etc.

Exporter le résultat en CSV

Depuis le Gestionnaire SQL, cliquez sur Exporter pour obtenir un fichier CSV contenant toutes les URLs. Vous pouvez aussi exporter directement en ligne de commande :


mysql -u votre_user -p votre_base \
  -e "SELECT ... (votre requête)" \
  --batch --raw > urls_images.csv

Étape 2 : Télécharger en masse avec cURL

cURL est l'outil idéal pour télécharger ces images de manière automatisée. Voici un script Bash complet :


#!/bin/bash
# Extraction en masse des images produits PrestaShop
# Usage : ./extract-images.sh urls_images.csv ./output/

INPUT_FILE="$1"
OUTPUT_DIR="${2:-./images_produits}"

mkdir -p "$OUTPUT_DIR"

# Ignorer la première ligne (en-tête CSV)
tail -n +2 "$INPUT_FILE" | while IFS=$'\t' read -r id nom id_image url; do
  if [ -n "$url" ]; then
    # Créer un sous-dossier par produit
    PRODUCT_DIR="$OUTPUT_DIR/product_${id}"
    mkdir -p "$PRODUCT_DIR"
    
    FILENAME=$(basename "$url")
    
    echo "Téléchargement : $nom (image $id_image)"
    curl -sS -o "$PRODUCT_DIR/$FILENAME" "$url" \
      --retry 3 \
      --max-time 30
  fi
done

echo "Extraction terminée dans $OUTPUT_DIR"

Alternative rapide avec xargs (parallélisation)

Pour accélérer considérablement le téléchargement sur un gros catalogue :


# Extraire uniquement la colonne URL du CSV
cut -f4 urls_images.csv | tail -n +2 > urls_only.txt

# Télécharger 10 images en parallèle
xargs -n 1 -P 10 curl -sS -O < urls_only.txt

Méthode alternative : accès direct au système de fichiers

Si vous avez un accès SSH ou FTP au serveur, vous pouvez copier directement le dossier /img/p/ dans son intégralité :


# Via rsync (recommandé — reprend en cas d'interruption)
rsync -avz user@serveur:/var/www/prestashop/img/p/ ./backup_images/

# Via SCP
scp -r user@serveur:/var/www/prestashop/img/p/ ./backup_images/

Cette approche récupère toutes les déclinaisons (toutes les tailles). Comptez environ 5 à 10 fois le poids des images originales selon le nombre de types configurés.

Redimensionnement et types d'images

PrestaShop redimensionne automatiquement chaque image uploadée selon les types définis dans Préférences > Images. Chaque type génère une copie à la taille configurée.

Si votre problème n'est pas d'extraire les images mais simplement d'obtenir une taille différente, il suffit de :

  1. Aller dans **Préférences > Images**
  2. Modifier les dimensions du type souhaité (ou en créer un nouveau)
  3. Cliquer sur **Régénérer les miniatures**
  4. Attention sur PrestaShop 8.x : La régénération de miniatures sur un catalogue volumineux (> 5000 produits) peut provoquer un timeout. Privilégiez la commande CLI :

    
    # PrestaShop 8.x — régénération via console
    php bin/console prestashop:image:regenerate --type=products
    

    Bonnes pratiques pour la gestion des images

    • **Sauvegardez les originaux** : PrestaShop conserve l'image d'origine (sans suffixe de type). C'est celle-ci qu'il faut extraire en priorité pour toute migration.
    • **Vérifiez le format** : les images peuvent être en `.jpg`, `.png`, `.gif` ou `.webp` (PS 8.x). Adaptez votre requête SQL si nécessaire.
    • **Utilisez WebP en PrestaShop 8.x** : le format WebP est nativement supporté et réduit le poids des images de 25 à 35 %. Activez-le dans **Préférences > Images > Générer des images au format WebP**.
    • **Nommez proprement vos fichiers** : si vous réimportez les images ailleurs, renommez-les avec le nom du produit pour le SEO (`chaise-scandinave-bleue.jpg` plutôt que `12345.jpg`).
#images produits #extraction SQL #cURL #migration images #base de données PrestaShop

Questions fréquentes

Tout ce que vous devez savoir sur ce sujet.

Un projet PrestaShop ?

Discutons-en directement.

★★★★★

193 projets livrés

Gratuit & sans engagement — réponse sous 24h

Alexandre Carette

Alexandre Carette

Expert PrestaShop & Architecture E-commerce

Développeur PrestaShop depuis 2014, 193 projets livrés. Je conçois des architectures headless Nuxt + PrestaShop et des outils d'automatisation IA pour les e-commerçants.