如何阻止Magento 2.3.7产品图片处理导致文件体积异常增大
解决Magento 2.3产品图片被强制处理导致体积暴涨的问题
方法1:通过代码重写彻底禁用图片处理逻辑
Magento默认会对上传的图片重新编码,哪怕禁用前端缩放也没用,得从根源阻止处理流程:
- 新建一个自定义模块(比如
Custom_ImageSkip),在模块里重写Magento\Catalog\Model\Product\Image类,替换掉图片处理的核心方法:
<?php namespace Custom\ImageSkip\Model\Product; use Magento\Catalog\Model\Product\Image as OriginalProductImage; class Image extends OriginalProductImage { protected function _processImage() { // 直接把原图复制到目标路径,跳过所有压缩、缩放处理 $source = $this->_getOriginalImageFile(); $target = $this->_getDestinationFile(); if (!file_exists($target) || filemtime($source) > filemtime($target)) { copy($source, $target); } return $this; } }
- 在模块的
etc/di.xml里配置重写规则:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <preference for="Magento\Catalog\Model\Product\Image" type="Custom\ImageSkip\Model\Product\Image" /> </config>
- 启用模块、编译代码:
bin/magento module:enable Custom_ImageSkip bin/magento setup:di:compile bin/magento cache:flush
方法2:修改模板让前端直接加载原图
不想写代码的话,直接改产品图片的输出模板,让前端跳过生成的图片,直接加载var/import/product_images里的原图:
- 把Magento默认的图片模板复制到你的主题目录:
cp vendor/magento/module-catalog/view/frontend/templates/product/image_with_borders.phtml app/design/frontend/[你的主题包]/[你的主题]/Magento_Catalog/templates/product/
- 修改模板里的URL生成逻辑,替换成原图路径:
// 找到原有的$imageUrl定义,替换成下面的代码 $productImageName = $block->getImage()->getProduct()->getImage(); $originalImageUrl = $this->getUrl('var/import/product_images/' . $productImageName);
- 刷新缓存后,前端就会直接加载你上传的原图了。
方法3:批量替换已生成的大体积图片
如果已经有不少产品生成了2.2M的图片,可以直接用原图覆盖:
- 先清理图片缓存:
bin/magento cache:clean image
- 批量复制原图到产品图片存储目录:
cp -r var/import/product_images/* pub/media/catalog/product/
- 复制完成后再刷新一次图片缓存即可。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

