After a recent update from Magento 2.1.7 to 2.3.3. product images are not displayed. I believe it is cache related, and most common (if not only) solution that I have found is to run:

php bin/magento catalog:images:resize

However, since there are about 12000 images, it takes forever to run, and it seems that it is slowing down with time. I have tried to run it several times. It ran from over 6-8h and it always comes to about 80% and there it seems to stop.

I have also tried: - cache flush, clean - manually flush images cache from admin - delete all images - import new images with different filenames

In the beginning, it was showing most of the images, and where there were none it showed Magento icon placeholder. Now, it is just "blank" (white) and I have noticed that all images are called like this:


When I go to the location:


At first, I didn't see the cache directory, but after I started opening products in a detail view I noticed that the cache directory has generated. However, the hash from directory where my images are and the one on the frontend in image source is not the same.

Also - on the homepage, there are modules with listed products, and when the homepage is opened no cache directory is generated...

Is it possible that my theme is using the wrong URL for cached images? And if it does - where do I change this? The theme is not supported by developers any more so... it is left to me :)

Here is one view that I found that is using product image


<?php // Product Image ?>
<div class="product-photo">
    <a href="<?php /* @escapeNotVerified */ echo $_product->getProductUrl() ?>" class="product photo product-item-photo" tabindex="-1">
        <?php $productImageThumb = $block->getImage($_product, 'category_page_grid-1');?>
        <span class="image0 image-switch">
            <?php echo $productImage->toHtml(); ?>
        <span class="image1 image-switch">
            <?php echo $productImageThumb->toHtml(); ?>
    <div class="new-sale-label">
         $specialprice = $_product->getSpecialPrice();
         $specialPriceFromDate = $_product->getSpecialFromDate();
         $specialPriceToDate = $_product->getSpecialToDate();
         $today = time();?>

         if ($specialprice) {
          if ($today >= strtotime($specialPriceFromDate) && $today <= strtotime($specialPriceToDate) || $today >= strtotime($specialPriceFromDate) && is_null($specialPriceToDate)) { ?>
           <span class="label-product label-sale">
                <?php if($_finalPrice < $_price): ?>
                  <?php $_savePercent = 100 - round(($_finalPrice / $_price)*100); ?>
                    <?php echo __('-%1',$_savePercent."%");?>
                  <?php endif; ?>
          <?php }
         $now = date("Y-m-d");
         $newsFrom = substr($_product->getNewsFromDate(), 0, 10);
         $newsTo = substr($_product->getNewsToDate(), 0, 10);

         if (($newsTo != '' || $newsFrom != '') && !$specialprice) {
         if (($newsTo != '' && $newsFrom != '' && $now >= $newsFrom && $now <= $newsTo) || ($newsTo == '' && $now >= $newsFrom) || ($newsFrom == '' && $now <= $newsTo)) {?>
           <span class="label-product label-new"><?php echo __('New'); ?></span>
         <?php }
         } ?>
       <div class="quickview-product">
            <a  data-role="quickview-button" data-id="<?php echo $_product->getId(); ?>" href="<?php echo $block->getUrl('quickview/product/quickview/id/' . $_product->getId()) ?>" title="" class="ajax diamond tooltip-toggle" data-placement="top" data-original-title="<?php echo ('Quick view') ?>">
            <?php echo $block->escapeHtml(__('Quick View')); ?>

  • I think it is worth checking your theme's template files to see if they are referencing specific cached paths. You could also compare your theme's templates to the equivalent defaults, e.g. /endor/magento/module-catalog/view/frontend/templates/product/image.phtml
    – jiheison
    Commented Jan 21, 2020 at 1:08
  • @jiheison Do you have some code example so that I can search for it in my template?
    – Oktarin
    Commented Jan 21, 2020 at 11:45
  • The product page is complicated by the gallery, but the category page is relatively simple. Take a look vendor/magento/module-catalog/view/frontend/templates/product/list.phtml to see how it is done. Note how $imageDisplayArea is calculated at the top of the file, and then passed in $productImage = $block->getImage($_product, $imageDisplayArea);. If your template is very different, you may have to view source on the page and look for clues about how to find the relevant template file in the filesystem, e.g. by searching for any unique CSS classes.
    – jiheison
    Commented Jan 21, 2020 at 16:06
  • @jiheison I found $productImage = $block->getImage($_product, $imageDisplayArea);and have updated my question with how it looks
    – Oktarin
    Commented Jan 21, 2020 at 20:44

1 Answer 1


All images/products come from "import". I found import files in /pub/media/catalog/product/import. Almost all images there were invalid, because of an error while grabbing them in import. So I have manually deleted all files from that directory using:

rm -fr *

After that I ran command:

php bin/magento catalog:images:resize

and it was like 100x faster than before.

I am still facing an issue where "old" images are stored in database tables:


And will try to purge them using this: https://github.com/magento-hackathon/EAVCleaner.

Meanwhile, after running catalog:image:resize function all images were repaired.

@jiheison THANK YOU ALL FOR YOUR HELP! I really appreciate it. It gave me some good insight :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.